UDP

1.udp是TCP/IP协议族中的一种协议能够完成不同机器上的程序间的数据通信
2.udp服务器、客户端
  • udp的服务器和客户端的区分:往往是通过请求服务和提供服务来进行区分
  • 请求服务的一方称为:客户端
  • 提供服务的一方称为:服务器
3.udp绑定问题

一般情况下,服务器端,需要绑定端口,目的是为了让其他的客户端能够正确发送到此进程
客户端,一般不需要绑定,而是让操作系统随机分配,这样就不会因为需要绑定的端口被占用而导致程序无法运行的情况


UDP客户端程序使用步骤:
  • 1.创建客户端套接字
  • 2.发送/接收数据
  • 3.关闭套接字

例:

一、发送数据:

from socket import *
#1. 创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
#2. 准备接收方的地址
sendAddr = ('192.168.11.74', 7788)
#3. 从键盘获取数据
sendData = input("请输入要发送的数据:")
#4. 发送数据到指定的电脑上
udpSocket.sendto(sendData.encode('gbk'), sendAddr)
#5. 关闭套接字
udpSocket.close()

二、发送、接收数据:

from socket import *

#1. 创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)

#2. 准备接收方的地址
sendAddr = ('192.168.1.103', 8080)

#3. 从键盘获取数据
sendData = input("请输入要发送的数据:")

#4. 发送数据到指定的电脑上
udpSocket.sendto(sendData.encode('gbk'), sendAddr)

#5. 等待接收对方发送的数据
recvData = udpSocket.recvfrom(1024) # 1024表示本次接
收的最大字节数

#6. 显示对方发送的数据
print(recvData)

#7. 关闭套接字
udpSocket.close()

TCP

1.TCP使用流程:

  • 1.socket创建一个套接字
  • 2.bind绑定ip和port
  • 3.listen使套接字变为可以被动链接
  • 4.accept等待客户端的链接
  • 5.recv/send接收发送数据

一个很简单的tcp服务器如下:

from socket import *

# 创建socket
tcpSerSocket = socket(AF_INET, SOCK_STREAM)

# 绑定本地信息
address = ('', 7788)
tcpSerSocket.bind(address)

# 使用socket创建的套接字默认的属性是主动的,使用listen将其变为
被动的,这样就可以接收别人的链接了
tcpSerSocket.listen(5)

# 如果有新的客户端来链接服务器,那么就产生一个新的套接字专门
为这个客户端服务器
# newSocket用来为这个客户端服务
# tcpSerSocket就可以省下来专门等待其他新客户端的链接
newSocket, clientAddr = tcpSerSocket.accept()

# 接收对方发送过来的数据,最大接收1024个字节
recvData = newSocket.recv(1024)
print ('接收到的数据为:',recvData)

# 发送一些数据到客户端
newSocket.send("thank you !")

# 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为
这个客户端服务了,如果还需要服务,只能再次重新连接
newSocket.close()

# 关闭监听套接字,只要这个套接字关闭了,就意味着整个程序不能再接
收任何新的客户端的连接
tcpSerSocket.close()

tcp客户端构建流程:

from socket import *

# 创建socket
tcpClientSocket = socket(AF_INET, SOCK_STREAM)

# 链接服务器
serAddr = ('192.168.1.102', 7788)
tcpClientSocket.connect(serAddr)

# 提示用户输入数据
sendData = input("请输入要发送的数据:")

tcpClientSocket.send(sendData.encode('gbk'))

# 接收对方发送过来的数据,最大接收1024个字节
recvData = tcpClientSocket.recv(1024)
print ('接收到的数据为:',recvData

# 关闭套接字
tcpClientSocket.close()

验证是用下方这个软件进行的

NetAssist.exe

python 本地udp服务无法启动_数据