学习笔记-网络基础2

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

当测试的时候由于都绑定的同一个端口,则发送的时候是发送给自己

模拟两个人进行聊天的软件,对方既能接收也能发送,其实对方也就相当于一个服务器和一个客户端,你发送的地址是他模拟的服务器地址,他发送的地址是你服务器的地址

猜你喜欢

转载自blog.csdn.net/weixin_43959953/article/details/84947442