套接字接上连接循环
#加上链接循环的server端
import socket
#生成一个socket对象
soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定地址跟端口号
soc.bind(('127.0.0.1',8001))
#监听(半链接池的大小),不是链接数
soc.listen(3)
#等着客户端来链接,conn至关于链接通道,addr是客户端的地址
while True:
print('等待客户端链接')
conn,addr=soc.accept() #卡主,若是没有客户端链接,会一直卡在这,当有链接,才继续往下走
print('有个客户端链接上了',addr)
while True:
try:
#windows若是客户端断开,会报错,加了try
#linux若是客户端,断开,不会报错,会收到空,全部当data为空时,也break
#等待接收,最大收取1024个字节
data=conn.recv(1024) #会卡主,当客户端有数据过来,才会执行
if len(data)==0: #处理linux客户端断开,若是在window下这段代码根本不会执行(即使是客服端发了空,这个地方也不会走到)
break
print(data)
except Exception:
break
# 关闭通道
conn.close()
# 关闭套接字
soc.close()
#client通讯循环
import socket
soc=socket.socket()
soc.connect(('127.0.0.1',8001))
while True:
in_s=input('请输入要发送的数据:')
#发送的数据必须是b格式,in_s.encode('utf-8') 把字符串编码成b格式
#把b格式转成字符串
# ss=str(b'hello',encoding='utf-8')
# ss=b'hello'.decode('utf-8')
# #把字符串转成b格式
# by=bytes('hello',encoding='utf-8')
# by='hello'.encode('utf-8')
soc.send(in_s.encode('utf-8'))