先看下面的代码,研究下执行后会出现什么?
服务端:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024sock_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=1024sock_client=socket(AF_INET,SOCK_STREAM)
sock_client.connect(ip_port)while True:cmd=input('输入命令:')if not cmd:continueif cmd == 'quit':breaksock_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=1024sock_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: breakprint('服务端输出结果:',data)conn.send(data.upper())
conn.close()
sock_server.close()
2> 上面客户端输入quit正常退出后服务端报错的问题解决了,但是还有种情况,比如客户端突然意外中断了而不是正常退出,服务端报错如下:
服务端代码改写如下:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024sock_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: breakprint('服务端输出结果:',data)conn.send(data.upper())except Exception as e:break
conn.close()
sock_server.close()
至此为止,问题解决了。