基于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()
只要启动,然后输入名字,就能进行聊天了
本文地址:https://blog.csdn.net/weixin_44502769/article/details/110929348
上一篇: 单片机必备知识---EEPROM