標籤:顯示 style python pos print 方法 post 關閉 適用於
一、服務端
1 import socket 2 3 4 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 5 phone.bind((‘127.0.0.1‘, 8080)) # 0-65535:0-1024給作業系統使用 6 phone.listen(5) 7 8 print(‘starting.....‘) 9 conn, client_addr = phone.accept()10 print(client_addr)11 12 while True: # 通訊迴圈13 data = conn.recv(1024)14 print(‘用戶端的資料‘, data)15 16 conn.send(data.upper())17 18 conn.close()19 phone.close()
二、用戶端
1 import socket 2 3 4 # 1、買手機 5 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 6 # print(phone) 7 8 # 2、撥號 9 phone.connect((‘127.0.0.1‘, 8080))10 11 # 3、發、收訊息12 while True:13 msg = input(‘>>:‘).strip()14 phone.send(msg.encode(‘utf-8‘))15 data = phone.recv(1024)16 print(data)17 18 # 4、關閉19 phone.close()
用戶端結果為:
1 >>:he2 b‘HE‘3 >>:asdf4 b‘ASDF‘5 >>:
服務端結果為:
1 starting.....2 (‘127.0.0.1‘, 64037)3 用戶端的資料 b‘he‘4 用戶端的資料 b‘asdf‘
三、有時間運行服務端程式的時候,顯示連接埠佔用錯誤,這時候可以使用如下代碼防止出現這種情況
1 phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
四、當用戶端輸入為空白時(也就是直接斷行符號),按斷行符號後,用戶端一直橫在那,
原因分析:
用戶端發送空資訊需要叫用作業系統介面,把用戶端程式記憶體中要發送的資訊拷貝到作業系統記憶體中,如果為空白的話,作業系統記憶體收不到資料,它也就不會發送給服務端,所以出現用戶端橫在那的現象
解決方案:
修改用戶端代碼:
1 while True:2 msg = input(‘>>:‘).strip()3 if not msg:4 continue5 phone.send(msg.encode(‘utf-8‘))6 data = phone.recv(1024)7 print(data)
五、如果用戶端意外中斷連線發生中斷,linux系統中,服務端會發生死迴圈,Windows系統中,服務端會直接報錯
解決方案:
修改服務端代碼:
1 while True: # 通訊迴圈 2 try: 3 data = conn.recv(1024) 4 if not data: # 適用於linux作業系統 5 break 6 print(‘用戶端的資料‘, data) 7 8 conn.send(data.upper()) 9 except ConnectionResetError: # 適用於windows作業系統10 break
Python--網路編程-----socket編程樣本--打電話--加上通訊迴圈