TCP通信之经典问题解决

先看下面的代码,研究下执行后会出现什么?

服务端:
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()

至此为止,问题解决了。

posted @ 2024-08-21 17:45  疯狂Python  阅读(16)  评论(0)    收藏  举报