Tcp多線程聊天室
實現服務器和客戶端間的多線程通信。服務器開放一個固定的ip和端口,供客戶端進行連接。服務器獲取客戶端的ip地址並與客戶端間進行通信。
主要過程
在服務器端:使用socket創建服務器實例對象,使用bind綁定連接ip和端口,使用listen進行客戶端訪問的監聽,使用recv進行數據的接收。在客戶端同樣首先socket創建對象,採用connect進行連接可i服務器,使用send和recv進行消息的發送和接收。建立多個客戶端連接時,使用threading實現多線程連接。
tcp聊天室代碼
服務器端:
import socket
server = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
server.bind(('172.25.254.250',4006))
server.listen(5)
print('服務端正在啓動')
clientSocket,address = server.accept()
print('客戶端地址:',address)
while True:
recvData = clientSocket.recv(1024)
print('服務端接收消息:',recvData.decode('utf-8'))
sendDate = input('server>> ')
if not sendDate:
continue
elif sendDate == 'quit':
print('quit')
exit()
clientSocket.send(sendDate.encode('utf-8'))
server.close()
clientSocket.close()
在使用多線程時,添加threading模塊,,在接收客戶端消息時,添加threadig模塊
while True:
# 4 接收客戶端的連接 accept()
clientSocket,address = server.accept()
print('客戶端地址:',address)
# 使用多進程
t = threading.Thread(target=get_client_conn,args=(clientSocket,address))
t.start()
# server.close()
clientSocket.close()
客戶端:
import socket
client = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
# 連接服務端
client.connect(('172.25.254.250',4006))
# 給服務端發消息
while True:
sendDate = input('client>> ')
if not sendDate:
continue
elif sendDate=='quit':
print('quit')
exit()
client.send(sendDate.encode('utf-8'))
# 接收服務端回覆的消息
recvData = client.recv(1024)
print('客戶端接收的消息:',recvData.decode('utf-8'))
client.close()