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