欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-08 08:07:43
基于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 然后就是发送字...

基于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()

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

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

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

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

相关标签: python socket