1 基本概念
1.1 UDP
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。主要特点:无连接、不可靠、快速传输。
1.2 TCP
TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。主要特点:基于流的方式、面向连接、可靠通信方式。
1.3 socket
不同主机上的进程之间如何通信?就是如何精准找到哪个地址哪个进程的通信,需要一个唯一标识。TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用进程(进程)
socekt就是 是进程间通信的一种方式,它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的。
2 网络通信流程
2.1UDP创建流程
1)创建客户端套接字
2)发送/接收数据
3)关闭套接字
2.2TCP创建流程
TCP-client 流程
1)创建客户端套接字
2)链接服务器
3)发送/接收数据
4)关闭套接字
TCP-server流程
1)创建服务端套接字
2)绑定IP和端口
3)将套接字设置监听
4)accept等待客户端链接,并创建新的套接字
5)接收/发送数据
6)关闭两个套接字
3 编程实践
3.1UDP
import socket
def main():
# 1.创建套接字
udp_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 2.设置目的地址和端口
dest_addr = ('192.168.0.2',7788)
# 3.获取要发送的数据
send_data = input("请输入要发送的数据")
# 4.发送数据到指定主机指定程序上
udp_client.sendto(send_data.encode('utf-8'),dest_addr)
# 5.关闭套接字
udp_client.close()
if __name__ == "__main__":
main()
3.2TCP-客户端
import socket
def main():
# 1.创建套接字
tcp_client=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.链接服务器
tcp_client.connect(('192.168.0.2', 8088))
# 3.发送接受数据
send_data = input("请输入要发送的信息")
tcp_client.send(send_data.encode("gbk"))
recv_data = tcp_client.recv(1024)
print(recv_data.decode("gbk"))
# 4.关闭套接字
tcp_client.close()
if __name__ == "__main__":
main()
3.2TCP-服务器端
import socket
def main():
# 1.创建套接字
tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2.绑定本地信息
tcp_server_socket.bind(('',7788))
# 3.设置监听
tcp_server_socket.listen(128)
#为多个客户服务。
while True:
print("等待新客户到来")
# 4.accept等待客户端连接
new_clinet_socket,clientAddr=tcp_server_socket.accept()
print("新客户已经到来%s"% str(clientAddr))
# 5.recv/send接收发送数据
recv_data = new_clinet_socket.recv(1024)
print("客户端发来请求是:%s" % recv_data.decode("gbk"))
new_clinet_socket.send("ok".encode("utf-8"))
# 6.关闭套接字
new_clinet_socket.close()
tcp_server_socket.close()
if __name__ == "__main__":
main()
这里使用的网络调试助手软件,来测试是否链接成功。