欧美麻豆久久久久久中文_成年免费观看_男人天堂亚洲成人_中国一级片_动漫黄网站免费永久在线观看_国产精品自产av一区二区三区

中培偉業IT資訊頻道
您現在的位置:首頁 > IT資訊 > 軟件研發 > 使用Python創建基于命令行的聊天室

使用Python創建基于命令行的聊天室

2020-07-22 16:49:33 | 來源:中培企業IT培訓網

Python是最通用的編程語言之一,并且可以通過其各種應用程序觀察到這一點。這是一個示例,說明如何使用python建立一個簡單的基于命令行的聊天室,該聊天室易于實現和理解。聊天室是一種媒介/界面,允許兩個或更多人聊天并將消息發送給每個人。它也可以是人際(一對一)和群聊。在本教程中,我們將建立一個可以同時容納兩個以上客戶的群聊室。

對于聊天室,我們將使用服務器-客戶端體系結構。這意味著一臺服務器將托管多個客戶端。

在深入研究代碼之前,我們要了解的最后一件事就是遵循此體系結構,我們需要編寫兩個腳本,一個用于服務器端,另一個用于客戶端。需要非常清楚的一件事是客戶端將僅通過服務器進行對話。他們之間將沒有直接的溝通。因此,讓我們深入研究代碼。

  服務器端代碼:

首先,我們將導入兩個名為“ socket”和“ threading”的庫。兩者都是內置庫,因此無需pip安裝它們。只需導入即可。套接字編程是一種連接網絡上的兩個節點以相互通信的方式,而線程模塊提供了一個非常簡單直觀的API,用于在程序中生成多個線程。然后,我們將繼續定義IP和端口。需要知道只能使用未保留的端口,因為這將在LocalHost上起作用,如果使用保留的端口,計算機可能會引起問題。

在定義套接字時,將使用名為(AF_INET)和(SOCK_STREAM)的兩個參數。第一個指示Internet套接字的使用,另一個指示TCP的使用。然后我們繼續定義廣播功能。它的基本功能是向客戶端列表中的客戶端發送消息。此功能尚未停用。我們還將在其他地方使用它。處理客戶是一項艱巨的工作,功能也是如此。它首先嘗試是否可以從客戶端接收到消息,如果是,則將其廣播。

但是,如果有任何類型的錯誤/問題,服務器將使事情變得簡單。它只是刪除客戶端。我們已經做了很多工作,但是添加客戶仍然在等待。所以現在就開始做。在接收功能中,關鍵字“ NICKNAME”被發送到客戶端,這意味著要求其昵稱。稍后在獲得昵稱后,它將客戶端添加到列表中。

好了,此循環保持活動狀態,并且多個客戶端可以加入服務器。您需要擁有正確的IP和端口地址的所有內容。

#Coded by Yashraj Singh Chouhan

import socket, threading #Libraries import

host = '127.0.0.1' #LocalHost

port = 7976 #Choosing unreserved port

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #socket initialization

server.bind((host, port)) #binding host and port to socket

server.listen()

clients = []

nicknames = []

def broadcast(message): #broadcast function declaration

for client in clients:

client.send(message)

def handle(client):

while True:

try: #recieving valid messages from client

message = client.recv(1024)

broadcast(message)

except: #removing clients

index = clients.index(client)

clients.remove(client)

client.close()

nickname = nicknames[index]

broadcast('{} left!'.format(nickname).encode('ascii'))

nicknames.remove(nickname)

break

def receive(): #accepting multiple clients

while True:

client, address = server.accept()

print("Connected with {}".format(str(address)))

client.send('NICKNAME'.encode('ascii'))

nickname = client.recv(1024).decode('ascii')

nicknames.append(nickname)

clients.append(client)

print("Nickname is {}".format(nickname))

broadcast("{} joined!".format(nickname).encode('ascii'))

client.send('Connected to server!'.encode('ascii'))

thread = threading.Thread(target=handle, args=(client,))

thread.start()

receive()

  客戶端代碼:

這是我們的第二個代碼,我們將在此為客戶編寫腳本。此代碼足以使我們獲得多個客戶,而不會出現任何問題。因此,我們從導入套接字和線程開始。初始化套接字后,我們需要將其連接到IP和端口。它們必須與服務器相同才能正常運行。

現在,我們需要連接到服務器,如果您還記得“ NICKNAME”是服務器發送的用于詢問昵稱的關鍵字,則如果客戶端收到該昵稱,它將發送該昵稱并進入聊天室。但是,如果無法接收該關鍵字,則連接會丟失?,F在我們已連接到服務器,為什么要等待,讓我們開始消息傳遞。

為此,我們有了寫功能來管理消息的發送。如果您想知道如何接收消息,請記住我們導入了線程。在這里發揮作用,我們需要兩個線程開始并完成。

您已經注意到,在發送之前,我們已經將消息編碼為ASCII,這是因為我們只能以字節形式發送消息,而不能以字符串形式發送消息。因此,請務必記住在發送之前進行編碼,在接收之后進行解碼。

#Coded by Yashraj Singh Chouhan

import socket, threading

nickname = input("Choose your nickname: ")

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #socket initialization

client.connect(('127.0.0.1', 7976)) #connecting client to server

def receive():

while True: #making valid connection

try:

message = client.recv(1024).decode('ascii')

if message == 'NICKNAME':

client.send(nickname.encode('ascii'))

else:

print(message)

except: #case on wrong ip/port details

print("An error occured!")

client.close()

break

def write():

while True: #message layout

message = '{}: {}'.format(nickname, input(''))

client.send(message.encode('ascii'))

receive_thread = threading.Thread(target=receive) #receiving multiple messages

receive_thread.start()

write_thread = threading.Thread(target=write) #sending messages

write_thread.start()

在現實世界中進行測試:

請記住,服務器將首先運行,然后可以加入多個客戶端。這可以在命令行中運行,但是我們需要不同的終端來單獨執行它們。

以上就是關于使用Python創建基于命令行的聊天室的全部內容,想了解更多關于Python的信息,請繼續關注中培偉業。

標簽: Python 軟件研發
主站蜘蛛池模板: 欧洲色情三级欧美三级视频 | 亚洲香蕉中文网 | 丁香花视频资源在线观看 | 国产盗摄TP摄像头偷窥 | 欧洲美熟女乱又伦免费视频 | 日本免费a∨片免费 | 在线国产中文字幕 | 夜夜爽爽爽 | 熟女人妻aⅴ一区二区三区60路 | 国产精品va无码二区 | 国产亚洲精品综合一区91555 | 亚洲熟妇无码一区二区三区 | 亚洲乱码中文字幕久久孕妇黑人 | 四虎影院在线免费观看 | 人妻少妇精品系列 | 又色又爽的无遮挡免费网址 | 在线观看免费视频一区 | 9999国产精品欧美久久久久久 | 人妻熟女一二三区夜夜爱 | 亚洲成av人影院 | 亚洲午夜成人片 | chineSe熟女老女人HD | 伊人久久精品亚洲午夜 | 国产成人无码精品一区二区三区 | 国产女主播喷水视频在线观看 | 欧美丰满熟妇XXXX性多毛 | 最新中文字幕免费看影视 | 永久免费AV无码网站性色AV | 久久久不卡国产精品一区二区 | 亚洲精品成AV人片天堂无码 | 好吊妞人成视频在线观看强行 | 国产欧美精品一区二区三区-老狼 | 九九热精品国产 | 亚洲AV午夜国产精品无码中文字 | 欧洲裸毛BBBBBXXXX | 蜜芽国产尤物AV尤物在线看 | 日本免码va在线看免费最新 | 午夜天堂成人欧美www无码 | 久久久久久久久久久大尺度免费视频 | 欧美一二三四五六七区 | 西西人体自慰扒开下部93 |