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 ...