Python3聊天室功能簡單實現

2021-09-25 20:54:11 字數 1788 閱讀 9204

python3聊天簡單實現的自我學習筆記

from asyncore import dispatcher

from asynchat import async_chat

import socket, asyncore

port = 7777

class chatsession(async_chat):

def __init__(self, sock):

async_chat.__init__(self, sock)

self.set_terminator(('\r\n').encode())

self.data =

def collect_incoming_data(self, data):

def found_terminator(self):

line = ''.join(self.data)

self.data =

print(line)

class chatserver(dispatcher):

def __init__(self, port):

dispatcher.__init__(self)

self.create_socket(socket.af_inet, socket.sock_stream)

self.set_reuse_addr()

self.bind(('', port))

self.listen(5)

self.sessions =

def handle_accept(self):

conn, addr = self.accept()

if __name__ == '__main__':

s = chatserver(port)

try: asyncore.loop()

except keyboardinterrupt: print()

chatserver類

init()方法

當我們執行伺服器程式事,ifname== 『main』:下的**塊將被執行。呼叫了chatserver()方法進行初始化伺服器,方法中呼叫方法create_socket()來建立乙個套接字,接著呼叫方法bind()方法將套接字繫結到特定的埠並使用listen()方法讓套接字監聽到來的連線。bind()方法中指定主機名和埠號,主機名為乙個空的字串,代表著localhost,埠號為7777。listen()方法中的5代表著最大連線數。還有兩行代買set_reuse_addr()和self.sessions=。前者方法可以使得重用原來的埠號。後者將session內容設定為空(初始化)。

handle_accept()方法

chatsession類

init()方法

self.set_terminator((』\r\n』).encode())作用是將行結束符設定成為「\r\n」。這裡需要將兩個結束符轉換為字串,否則出現錯誤:

argument should be integer or bytes-like object, not 'str'
這裡需要將字串轉換為位元組,通過encode()方法。位元組轉換成字串的方法是decode();

self.data = 初始化資料,將之後讀取到的資料存在字串列表data中。

collect_incoming_data()和found_terminator()方法

如有錯誤,求指正。本人也在學習中~

python3實現多執行緒聊天室

使用python3建立多執行緒聊天室,供大家參考,具體內容如下 import threading i程式設計客棧mport socket socket udpsocket none 計數器 num 1 1.建立接受,傳送方法 def inmessage global num while true 等...

簡單聊天室

include include include include include include include include include include pthread t thread 2 void send msg void ip msg if connect sockfd,struct ...

Python簡單多人聊天室

伺服器端 auther kele 匯入socket包 import socket,threading 建立乙個socket物件 server socket.socket socket.af inet,socket.sock stream 獲取本地ip host socket.gethostname ...