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

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

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

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

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

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

客户端代码:

from socket import *
# 发起udp请求
resSocket=socket(AF_INET,SOCK_DGRAM)

# 要发送的地址,服务端地址
sendAddr=('192.168.8.195',8888)
# 绑定本地端口
# ip地址和端口号,ip一般不用写,表示本机的任何一个ip
resSocket.bind(('192.168.8.195',6666))
#发送方也可以绑定
# resSocket.bind(bindAddr)
n=10
while n>0:


    # 4. 发送数据到指定的电脑上
    # 第一个参数是二进制对象,要将字符串转换为二进制对象,
    # 需要使用encode方法,根据对方接收什么编码,进行解码。
    sendData = input('请输入客户端要发送的数据:')
    # sendData要用encode('gbk')编码成byte型
    resSocket.sendto(sendData.encode('gbk'), sendAddr)
    # 接收服务端信息
    recvData=resSocket.recvfrom(1024)
    # 发送的内容recvData[0].decode('gbk')要用decode进行解码,解码的类型和发送端编码类型一致
    print('发送方%s,端口号%s:%s'%(recvData[1][0],recvData[1][1],recvData[0].decode('gbk')))

    n=n-1
resSocket.close()

服务端代码:

from socket import *
#1. 创建套接字
# 创建请求协议
# SOCK_DGRAM表示UDP协议,AF_INET表示ipv4
udpSocket=socket(AF_INET,SOCK_DGRAM)


# 发送/接收数据
#2. 准备接收方的地址
# 准备要发送数据到的客户ip地址,即客户端
sendAddr=('192.168.8.195',6666)
# 绑定本端口地址,服务端和客户端ip地址可以一样但是端口必须不一样
udpSocket.bind(('192.168.8.195',8888))
n=10
while n>0:
    # 第一时间接收客户端到信息,
    recvData=udpSocket.recvfrom(1024)
    # 输出收到的信息
    print('发送方:%s端口号:%s:%s'%(recvData[1][0],recvData[1][1],recvData[0].decode('gbk')))
    # 3. 从键盘获取数据
    sendData = input('请输入要发送的数据:')
    # 4. 发送数据到指定的电脑上:向客户端发送数据
    udpSocket.sendto(sendData.encode('gbk'), sendAddr)

    n=n-1
# 5关闭请求协议(关闭套接字)
udpSocket.close()

猜你喜欢

转载自www.cnblogs.com/Dark-fire-liehuo/p/9762703.html