先看下面的代码,研究下执行后会出现什么?
服务端:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024
sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)
while True:
print('服务端建立连接...')
conn,addr=sock_server.accept()
while True:
data=conn.recv(1024)
print('服务端输出结果:',data)
conn.send(data.upper())
conn.close()
sock_server.close()
客户端:
from socket import *
ip_port=('127.0.0.1',8002)
buffer_size=1024
sock_client=socket(AF_INET,SOCK_STREAM)
sock_client.connect(ip_port)
while True:
cmd=input('输入命令:')
if not cmd:continue
if cmd == 'quit':break
sock_client.send(cmd.encode('utf-8'))
data=sock_client.recv(1024).decode('utf-8')
print(data)
输出报错结果解析:
1> 客户端输入quit,服务端报错如下:
服务端此时会循环报这个错,客户端不用改,服务端改写方法:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024
sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)
while True:
print('服务端建立连接...')
conn,addr=sock_server.accept()
while True:
data=conn.recv(1024)
if not data: break
print('服务端输出结果:',data)
conn.send(data.upper())
conn.close()
sock_server.close()
2> 上面客户端输入quit正常退出后服务端报错的问题解决了,但是还有种情况,比如客户端突然意外中断了而不是正常退出,服务端报错如下:
服务端代码改写如下:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024
sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)
while True:
print('服务端建立连接...')
conn,addr=sock_server.accept()
while True:
try:
data=conn.recv(1024)
if not data: break
print('服务端输出结果:',data)
conn.send(data.upper())
except Exception as e:
break
conn.close()
sock_server.close()
至此为止,问题解决了。
标签:sock,通信,TCP,server,conn,经典,data,port,服务端 From: https://www.cnblogs.com/kkbest/p/18372216