基于Python+TCP/IP的简易聊天室

首先我们要了解TCP/IP连接的过程

服务器

1 创建套接字

tcpSerSock=socket(AF_INET,SOCK_STREAM)

2 bind一个地址,因为没有服务器,所以绑定了本地地址和端口

tcpSerSock.bind(Addr)
Addr=(Host,Port)

3 开始监听客户端,参数为监听的个数

tcpSerSock.listen(5)

4 append到客户端

sockets.append(tcpCliSock)

5 然后就是发送字节和接收字节的事

data=tcpCliSock.recv(1024)#接收字节
socket.send(data)#发送字节

6 最后要关闭连接和关闭套接字

tcpCliSock.close()

客户端

1 创建TCP/IP套接字

tcpCliSock=socket(AF_INET,SOCK_STREAM)

2 连接服务器,连接的是本地服务器

Host='localhost'
Port=10000
Addr=(Host,Port)
tcpCliSock.connect(Addr)

3 进行发送和接收字节

recv_data=tcpCliSock.recv(1024)
tcpCliSock.send(msg.encode('utf-8'))

4 最后也要记得关闭连接

tcpCliSock.close()

如果想要多人同时聊天,要加入多线程
然后在封装的函数里启用多线程

最后全部的代码

服务器:


from socket import *
from time import ctime
from threading import Thread
sockets=[]

Host=''
Port=10000
Addr=(Host,Port)
    
tcpSerSock=socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(Addr)
tcpSerSock.listen(5)
    

def main():
    while True:
        print("waiting for connection...")
        tcpCliSock,addr=tcpSerSock.accept()
        sockets.append(tcpCliSock)
        print('connected from:',addr,ctime())
        t=Thread(target=readMsg,args=(tcpCliSock,))
        t.start()
        
        
def readMsg(tcpCliSock):
    while True:
        data=tcpCliSock.recv(1024)
        if data.decode('utf-8').endswith('bye'):
            sockets.remove(tcpCliSock)
            tcpCliSock.close()
            print('有客户端退出')
            
            break
        
        for socket in sockets:
            socket.send(data)
        
    tcpCliSock.close()
    

        
if __name__=='__main__':
    main()

客户端:


from socket import *
from time import ctime
from threading import Thread
flag=True

Host='localhost'
Port=10000
Addr=(Host,Port)
    
tcpCliSock=socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(Addr)

name=input ('请输入用户名:')
def readMsg(tcpCliSock):
    while flag:
        recv_data=tcpCliSock.recv(1024)
        print(recv_data.decode('utf-8'))

def writeMsg(tcpCliSock):
    global flag
    while flag:
        msg=input('>')
        msg=name+':'+msg
        tcpCliSock.send(msg.encode('utf-8'))
        if msg.endswith('bye'):
            flag=False
            break

t1=Thread(target=readMsg,args=(tcpCliSock,))
t1.start()

t2=Thread(target=writeMsg,args=(tcpCliSock,))
t2.start()
t1.join()
t2.join()
tcpCliSock.close()

只要启动,然后输入名字,就能进行聊天了

本文地址:https://blog.csdn.net/weixin_44502769/article/details/110929348