码迷,mamicode.com
首页 > 其他好文 > 详细

socket编程之服务器和客户端

时间:2018-02-08 20:02:26      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:net   class   tin   标识   end   close   ...   nec   from   

服务端和客户端就像银行出纳员和客户样,一个银行出纳员(服务器),不吃不睡的服务排队的客户,每个客户都会有要解决的问题,一旦完成,客户就会走开,出纳员等待下一个客户的到来。

服务器端:

from socket import *
from time import ctime

HOST =  ‘‘ #空白,是对bind方法的标识,可以使用任何可用的地址
PORT =  21567
BUFSIZ = 1024 #缓冲区大小设为1kb
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM) #分配tcp协议套接字
tcpSerSock.bind(ADDR) #将套接字绑定到服务器地址
tcpSerSock.listen(5) #开启tcp监听器的调用

while True: #无限的循环,不断的监听
    print(waitting for connect)
    tcpCliSock, addr = tcpSerSock.accept() #等待客户端的连接
    print(...connect from: , addr)
    
    while True:
        data = tcpCliSock.recv(BUFSIZ)#接受客户端数据
        if not data:#如果消息为空,跳出本会话循环,等待另一个客户端连接
            break
        tcpCliSock.send(b[%s] %s %(bytes(ctime(), utf-8),data))#必须加b‘’否则还是str #如果得到消息则格式化返回数据并加上时间戳
    
    tcpCliSock.close()#并不会执行
tcpSerSock.close()#并不会执行
>>>
waitting for connect
 

客户端:

from socket import *

HOST =  127.0.0.1
PORT =  21567 #应与服务端相同
BUFSIZ = 1024 #大小也应该相同
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)#分配tcp客户端套接字
tcpCliSock.connect(ADDR)#主动调用并连接到服务器

while True:#无限循环,
    data = input(>)#输入数据
    if not data:#如果输入为空,则跳出循环
        break
    tcpCliSock.send(bytes(data, encoding = "utf8") )#发送的数据只能是bytes,用bytes(s, encoding=‘utf-8‘)将输入的str转为bytes #发送到服务器进行数据处理
    data = tcpCliSock.recv(BUFSIZ)#接受到服务器加工过的信息
    if not data:#如果调用失败则退出循环
            break
    print(data.decode(utf-8))#将bytes转为str #输出到屏幕
    
    
tcpCliSock.close()

>>>
[Thu Feb  8 16:51:49 2018] h
>hello lily
[Thu Feb  8 16:52:56 2018] hello lily
>你好
[Thu Feb  8 16:53:43 2018] 你好
>as long as you were happy
[Thu Feb  8 17:27:39 2018] as long as you were happy
 

 

socket编程之服务器和客户端

标签:net   class   tin   标识   end   close   ...   nec   from   

原文地址:https://www.cnblogs.com/Zhu-Xueming/p/8432662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!