技术分享
socket实现即时通讯示例
来源:优码网     阅读:68
林风小破店
发布于 2023-11-19 00:13
查看主页

qbz1pguu.bmp

下面是一个简单的Python Socket编程示例,实现了一个基本的即时通讯功能。这个例子包括一个服务器端和一个客户端。

服务器端(Server):

python
import socket  
import threading  
  
class Server:  
    def __init__(self, host = '127.0.0.1', port = 55555):  
        self.host = host  
        self.port = port  
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
        self.server.bind((self.host, self.port))  
        self.server.listen()  
        self.clients = []  
        self.nicknames = []  
  
    def broadcast(self, message):  
        for client in self.clients:  
            client.send(message)  
  
    def handle(self, client):  
        while True:  
            try:  
                message = client.recv(1024)  
                self.broadcast(message)  
            except:  
                index = self.clients.index(client)  
                self.clients.remove(client)  
                client.close()  
                nickname = self.nicknames[index]  
                self.nicknames.remove(nickname)  
                self.broadcast(f'{nickname} left the chat!'.encode('ascii'))  
                break  
              
    def receive(self):  
        while True:  
            client, address = self.server.accept()  
            print(f'Connected with {str(address)}')  
            client.send('NICK'.encode('ascii'))  
            nickname = client.recv(1024).decode('ascii')  
            self.nicknames.append(nickname)  
            self.clients.append(client)  
            print(f'Nickname of the client is {nickname}!')  
            self.broadcast(f'{nickname} joined the chat!'.encode('ascii'))  
            client.send('Connected to the server!'.encode('ascii'))  
            thread = threading.Thread(target=self.handle, args=(client,))  
            thread.start()



客户端(Client):

python
import socket  
import threading  
  
class Client:  
    def __init__(self, host = '127.0.0.1', port = 55555):  
        self.nickname = input("Enter nickname: ")  
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
        self.client.connect((host, port))  
        print("Connected to the server!")  
        self.receive()  
    def receive(self):    
        while True:   
            try:   
                message = self.client.recv(1024).decode('ascii')   
                if message == 'NICK':   
                    self.client.send(self.nickname.encode('ascii'))   
                else:   
                    print(message)   
            except:   
                print("Error occurred!")   
                break   
    def send(self, message):   
        self.client.send(message.encode('ascii'))


免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 技术分享
相关推荐
分享建站经验:教你如何打造一个成功的网站
移动互联网社交江湖已定,抖音为何仍不放过微信?
基于 Sentinel 实现历史监控数据回看
网站建设相关问题(精选10篇)
建站心得(网站建设经验分享)

首页

消息

购物车

我的