DUP在python中的连接
配置客户端
c/s构架中其实客户端用python来实现简单的抠脚
客户端需要进行向服务端进行发送消息,客户端需要进行接收消息,此时客户端就模拟出了一个服务端,所以这里进行客户端的演示
from socket import *
# 创建客户端对象,并传入参数第一个是指的ipv4协议,第二个是指的udp协议
client = socket(AF_INET, SOCK_DGRAM)
# 发送消息
client.sendto("1:525:匿名:匿名:32:内容".encode('gb2312'),('172.16.17.16',8080))
发送消息的里面的字符串实际上是要符合某个其他程序的标准
配置服务端
from socket import *
# 创建对象 第一个是ipv4协议 第二个是udp协议
server = socket(AF_INET, SOCK_DGRAM)
# 把配置告知内核不写就是本机,第二个还是端口
server.bind(('192.168.1.102', 8888))
# 设置等待数据,并且接受数据量
data, address = server.recvfrom(1024) # 设置每次拿的多少
print(data.decode('gb2312'))
使用recevfrom进行接收的时候,1024只是限定接收的长度
bind里面直接放地址和端口,需要注意这里是元组
实现同时客户端和服务端的配置
使用多线程处理,通过多线程实现服务器功能和客户端功能
import threading
from socket import *
def servers(): # 模拟服务器
while True:
# 服务端 获取数据打印数据
data, address = talk.recvfrom(1024) # 限定每次获取的字符长度
# 对数据进行处理
print("\r<<{}\n>>".format(data.decode('gb2312')), end='')
def clients(): # 模拟客户端
while True:
# ip = ('172.16.17.16',8080) # 测试用ip
data = input('>>')
talk.sendto(data.encode('gb2312'),configs)
if __name__ == '__main__':
# 创建两个线程
t1 = threading.Thread(target=servers)
t2 = threading.Thread(target=clients)
# 由于要连接网络,需要先实例化对象 参数对应的是ipv4 和 udp协议
talk = socket(AF_INET, SOCK_DGRAM)
# 准备好连接的地址和端口
configs = ('172.16.17.16',8081)
# 必须启动线程
# 服务器必须挂起
talk.bind(configs)
t1.start()
t2.start()
当测试的时候由于都绑定的同一个端口,则发送的时候是发送给自己
模拟两个人进行聊天的软件,对方既能接收也能发送,其实对方也就相当于一个服务器和一个客户端,你发送的地址是他模拟的服务器地址,他发送的地址是你服务器的地址