python高级进阶_33_使用socket 模拟UDP服务器接收信息

在写服务端的时候,一定要明白一个事情就是 绑定端口和ip 。

有的人该问了在写发送方的时候,为什么没有写 ip 和端口

解释如下:

发送方的IP 可以是动态的, 是由操作系统自动分配的, 发送方只是客户端,服务器不会关心你的客户端的ip ,只要发送我就接受 。

但是 服务器端 如果不绑定 ip ,当 客户端发送信息的时候,找不到ip 路由,就是达不到你这个机器上,

有个规定 当你不绑定的时候,默认为你本机ip ,如果你绑定其他机器ip 是报错的, 自己可以试试

端口 也是一样 发送方 可以为任意端口,除了常用端口不能用,其他都可以用,也可以是操作系统分配。

但是 服务器 必须固定,否则 找不到这个程序, 在绑定服务器端口的时候 要注意 不能和其他程序重复,否则会启动失败。

模拟 UDP 服务器

先设置 客户端的信息,如下:

在这里插入图片描述

编写服务端 , 让他能接受客户端的信息:

from socket  import *
udpsocket=socket(AF_INET,SOCK_DGRAM)
bindarr=('',8080)
udpsocket.bind(bindarr)  # 服务端绑定 ip 和 端口, 不写ip 默认是本机
print("开始接受信息中.................")
while True:
    recedata=udpsocket.recvfrom(1024)
    print(recedata)
udpsocket.close()

打印结果为:

开始接受信息中…
(b’i am client ,please server recive’, (‘192.168.43.224’, 8089)) # 元祖里显示的client 的 ip 和端口
(b’i am client ,please server recive’, (‘192.168.43.224’, 8089))
(b’i am client ,please server recive’, (‘192.168.43.224’, 8089))
(b’i am client ,please server recive ', (‘192.168.43.224’, 8089))
(b’i am client ,please server recive ', (‘192.168.43.224’, 8089))
(b’i am client ,please server recive ', (‘192.168.43.224’, 8089))
(b’i am client ,please server recive ', (‘192.168.43.224’, 8089))
(b’i am client ,please server recive ', (‘192.168.43.224’, 8089))

如果想接受 汉字,必须decode 下, 代码改下 :

from socket  import *

udpsocket=socket(AF_INET,SOCK_DGRAM)

bindarr=('',8080)

udpsocket.bind(bindarr)

print("开始接受信息中.................")
while True:

    recedata, deskinfo=udpsocket.recvfrom(1024)  # 由于返回的是元祖,让 recedata 接受返回的数据,
    print(recedata.decode("gb2312"))  # 由于客户端只是gb2312, 一般要用国际标准 utf-8
udpsocket.close()

随便发送汉字都可以 .

总结: encode 是编码, 在发送的时候能遇到, decode 是解码把一些乱码能转化为咱们看的懂的。

代码优化下 ,请看下边

if __name__=="__main__":

    global udpsocket
    global ip
    global port
    ip=input("ip:  ")
    port=int(input("port:  " ))
    udpsocket = socket(AF_INET, SOCK_DGRAM)
    bindarr = ('', 8080)
    udpsocket.bind(bindarr)
    print("开始接受信息中.................")
    thread1 = Thread(target=receve)
    thread2 = Thread(target=send)
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于 Python 在线编程实现网络编程和 socket 实现在线聊天机器人的建议。 首先,您可以使用 Pythonsocket 模块来实现网络编程和在线聊天机器人。该模块提供了创建套接字(socket)对象的函数,可以使用 TCP 或 UDP 协议与其他计算机进行通信。 下面是一个简单的 Python 聊天机器人示例: ```python import socket # 创建套接字 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 获取本地主机名 host = socket.gethostname() # 设置端口号 port = 9999 # 绑定端口号 s.bind((host, port)) # 设置最大连接数,超过后排队 s.listen(5) while True: # 建立客户端连接 clientsocket, addr = s.accept() print("连接地址:%s" % str(addr)) msg = '欢迎访问我的聊天机器人!' + "\r\n" clientsocket.send(msg.encode('utf-8')) while True: data = clientsocket.recv(1024).decode('utf-8') print("客户端消息:%s" % str(data)) # 回复消息 msg = '你说了:%s' % data + "\r\n" clientsocket.send(msg.encode('utf-8')) ``` 在上面的示例中,我们首先创建了一个套接字对象,并使用 `bind()` 函数将其绑定到本地主机和端口号。然后,我们使用 `listen()` 函数设置最大连接数,并在 `while` 循环中等待客户端连接。一旦客户端连接到服务器,我们将发送欢迎消息,并在 `while` 循环中接收和发送消息。 您可以根据需要修改此示例,将其用作在线聊天机器人。一种方法是使用 Python 的自然语言处理库,例如 NLTK 或 SpaCy,处理和生成聊天消息。 希望这些信息对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值