UDP网络程序,客户端和服务端交互原理

创建一个udp客户端程序的流程是简单,具体步骤如下:

  • 创建客户端套接字
  • 发送/接收数据
  • 关闭套接字

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。但UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。

现在给大家展现一个关于服务端和客户端的交互端口程序代码如下,具体介绍在代码中有详细的注明:

'''

socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:

它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的

例如我们每天浏览网页、QQ 聊天、收发 email 等等

'''

客户端代码:

from socket import *
# 发起udp请求
resSocket=socket(AF_INET,SOCK_DGRAM) # 要发送的地址,服务端地址
sendAddr=('192.168.8.195',)
# 绑定本地端口
# ip地址和端口号,ip一般不用写,表示本机的任何一个ip
resSocket.bind(('192.168.8.195',))
#发送方也可以绑定
# resSocket.bind(bindAddr)
n=
while n>: # . 发送数据到指定的电脑上
# 第一个参数是二进制对象,要将字符串转换为二进制对象,
# 需要使用encode方法,根据对方接收什么编码,进行解码。
sendData = input('请输入客户端要发送的数据:')
# sendData要用encode('gbk')编码成byte型
resSocket.sendto(sendData.encode('gbk'), sendAddr)
# 接收服务端信息
recvData=resSocket.recvfrom()
# 发送的内容recvData[].decode('gbk')要用decode进行解码,解码的类型和发送端编码类型一致
print('发送方%s,端口号%s:%s'%(recvData[][],recvData[][],recvData[].decode('gbk'))) n=n-
resSocket.close()

服务端代码:

from socket import *
#. 创建套接字
# 创建请求协议
# SOCK_DGRAM表示UDP协议,AF_INET表示ipv4
udpSocket=socket(AF_INET,SOCK_DGRAM) # 发送/接收数据
#. 准备接收方的地址
# 准备要发送数据到的客户ip地址,即客户端
sendAddr=('192.168.8.195',)
# 绑定本端口地址,服务端和客户端ip地址可以一样但是端口必须不一样
udpSocket.bind(('192.168.8.195',))
n=
while n>:
# 第一时间接收客户端到信息,
recvData=udpSocket.recvfrom()
# 输出收到的信息
print('发送方:%s端口号:%s:%s'%(recvData[][],recvData[][],recvData[].decode('gbk')))
# . 从键盘获取数据
sendData = input('请输入要发送的数据:')
# . 发送数据到指定的电脑上:向客户端发送数据
udpSocket.sendto(sendData.encode('gbk'), sendAddr) n=n-
# 5关闭请求协议(关闭套接字)
udpSocket.close()
上一篇:Firemonkey MultiView


下一篇:php中的$_GET怎样获取带有井号“#”的參数