Server
import socket #引入socket模块 #建立一个UDP的服务端 udpServer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #127.0.0.1 - 127.255.255.254 都属于访问本地 但是都是用 127.0.0.1 udpServer.bind(("10.0.144.160",8244)) #将server绑定一个ip和端口号,以便客户端访问 while True: print("x") data,addr = udpServer.recvfrom(1024) # recvfrom()函数,是UDP专用的函数,用于接收数据,返回远端的字节数和ip地址,或者发生错误时返回-1 print("消息为:",data.decode("utf-8"),"地址为",addr)
Client:
import socket udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True: data = input("请输入你要说的话") udp.sendto(data.encode("utf-8"),("10.0.144.160",8244)) #sendto UDP常用的函数,向某一地址发送数据
可以看到,无论是客户端还是服务器端,都使用了一条语句:
udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
那么这行代码是什么意思呢
这里首先要搞清楚什么是套接字,套接字(scoket)是一种具有通信端口的计算机网络数据结构,大概相当于电话的插口,没有它就没办法通信。
套接字主要分为两种:基于文件型和基于网络的
第一种是AF_UNIX,基于文件的unix系统通信,由于两个进程同时运行在一个机器上,两个进程之间的socket便是基于文件系统而不是基于网络系统,文件系统可以被不同的进程所访问,不过这部分我暂时还没接触, 等以后运用到再详细研究。
第二种是AF_INET,基于网络的,即internet。是ipv4套接字,比之ipv6,传输更便捷。
socket.SOCK_DGRAM 代表的是UDP协议,socket.SOCK_STREAM代表TCP协议
bind()将创建的套接字绑定一个ip,类似于实例化吧,把虚的东西切实的绑定一个地址。
第一次写博客,见谅见谅。
时间: 2024-10-12 20:40:14