1. 程式人生 > >Python中的TCP程式設計,實現客戶端與伺服器的聊天(socket)

Python中的TCP程式設計,實現客戶端與伺服器的聊天(socket)

1、在TCP中,客戶端的實現流程:(1)、建立客戶端的socket物件   (2)、建立與伺服器之間的聯絡  (3)、傳送請求  (4)、接收資料  (5)、關閉連線

2、服務端的實現流程:(1)、建立服務端的socket物件  (2)、繫結服務端的地址 (3)、設定監聽器 (4)、等待客戶端的連線 (5)、接收客戶端的請求  (6)、返回處理的結果到客戶端

3、在TCP程式設計中,客戶端和服務端的流程以及聯絡如下圖:

4、有了上面的描述,下面就來寫程式碼,分別是服務端和客戶端的,起始也就是把上面的思路、流程翻譯成程式碼就好了

client.py(客戶端的程式碼)

import socket
#
建立一個客戶端的socket物件 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #設定服務端的ip地址 host = "10.36.135.90" #設定埠 port = 9092 #連線服務端 client.connect((host, port)) #while迴圈是為了保證能持續進行對話 while True: #輸入傳送的訊息 sendmsg = input("請輸入:") #如果客戶端輸入的是q,則停止對話並且退出程式 if sendmsg=='q': break sendmsg = sendmsg #
傳送資料,以二進位制的形式傳送資料,所以需要進行編碼 client.send(sendmsg.encode("utf-8")) msg = client.recv(1024) #接收服務端返回的資料,需要解碼 print(msg.decode("utf-8")) #關閉客戶端 client.close()
(2)、server.py(服務端)
import socket
#建立服務端的socket物件socketserver
socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '10.36.135.90'
port = 9092 #繫結地址(包括ip地址會埠號) socketserver.bind((host, port)) #設定監聽 socketserver.listen(5) #等待客戶端的連線 #注意:accept()函式會返回一個元組 #元素1為客戶端的socket物件,元素2為客戶端的地址(ip地址,埠號) clientsocket,addr = socketserver.accept() #while迴圈是為了能讓對話一直進行,直到客戶端輸入q while True: #接收客戶端的請求 recvmsg = clientsocket.recv(1024) #把接收到的資料進行解碼 strData = recvmsg.decode("utf-8") #判斷客戶端是否傳送q,是就退出此次對話 if strData=='q': break print("收到:"+strData) msg = input("回覆:") #對要傳送的資料進行編碼 clientsocket.send(msg.encode("utf-8")) socketserver.close()

5、上面程式碼執行的結果

(1)、服務端的結果:


(2)、客戶端的結果