tcp多線程聊天室

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()

運行測試:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章