先看下面的程式碼,研究下執行後會出現什麼?
服務端:
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()
至此為止,問題解決了。