python tcp

本文详细介绍了一种基于TCP协议的服务器与客户端通信的实现方式,包括Python代码示例。服务器能够同时处理多个客户端的连接请求,实现了消息的接收、解析和转发功能,客户端则能与服务器进行实时信息交互。

在这里插入图片描述

tcp模拟服务器与客服端的通信

客户端
import socket
import threading
s=socket.socket(2,1)
s.connect((‘192.168.14.130’,8080)) #连接之后后面的发送与接收信息都只能与服务器进行
print(‘连接成功!’)
def send(s):
while True:
data=input(‘发送信息:’).encode(‘gbk’)
s.send(data)
print(‘发送成功!’)
def recv(s):
while True:
print(‘接收到服务器数据:’, s.recv(1024).decode(‘gbk’))
threading.Thread(target=recv,args=(s,)).start()
threading.Thread(target=send,args=(s,)).start()
服务器端:
import socket
import threading
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 【TCP 协议的socket】 也是创建新的套接字
server.bind((‘192.168.14.134’,8088)) #【绑定本地IP和端口】
print(“服务器 已开启!!!!”)
server.listen(10) #【开始监听】
print(“等待链接”)
#多线程 实现 链接多个客户端!!!
listA=[] # 【用来存储 链接的客户端】
#接受客户端的数据!
def recv(end,listA):
while True:
x=end[0].recv(1024).decode(‘gbk’)
if x!=’’:
print(‘接收到%s,数据:%s’%(end[1],x))
if x.find(’:’)!=-1: # 服务器 解析 后 转发!!!
if x[:x.find(’:’)]==‘all’:
for i in listA:
i[0].send((str(end[1]) + ‘发送:’ + x[x.find(’:’):]).encode(‘gbk’))
else:
for i in listA:
if i[1][0]==x[:x.find(’:’)]:
i[0].send((str(end[1])+‘发送:’+x[x.find(’:’):]).encode(‘gbk’))
else:
end[0].close()
listA.remove(end)
break

#发送数据
def send(listA):
while True:
data=input(“请输入数据? 格式 ip:数据”).split(’:’)
if data[0]==‘all’:
for i in listA:
i[0].send(data[1].encode(‘gbk’))
print(‘发送成功!’, i[1])
else:
for i in listA: # 向所有人发送数据
if i[1][0]==data[0]:
i[0].send(data[1].encode(‘gbk’))
print(‘发送成功!’,i[1])
def accept(server):
while True:
end = server.accept() # 【接受链接】 #s.accept()接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址
print(“新人报道!!”, end[1])
end[0].send(‘你好~~~’.encode(‘gbk’))
threading.Thread(target=recv,args=(end,listA)).start()
listA.append(end)

threading.Thread(target=accept,args=(server,)).start()
threading.Thread(target=send,args=(listA,)).start()
# end[0].send(‘你好’.encode(‘gbk’)) # 发送
# print(“等待接受”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值