python | 网络编程(socket、udp、tcp)
一、套接字 socket
1.1 作用:实现不同主机间的进程间通信(不同电脑、手机等设备之间收发数据)
1.2 分类:udp、tcp
1.3 创建 socket
1 import socket 2 socket.socket(AddressFamily, Type)
AddressFamily:AF_INET:用于网络间进程通信;AF_UNIX:用于同一台机器中
Type:SOCK_DGRAM:upd 协议使用;SOCK_STREAM:tcp 协议使用
二、upd socket
2.1 创建 udp socket,并使用其收发数据
1 import socket 2 3 # 创建 udp 套接字 4 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 5 6 # 绑定本地信息,bind后面的()里一定要是个元组!!元组!! 7 udp_socket.bind(("", 7890)) 8 9 # 获取要发送的内容 10 send_msg = input("请输入要发送的内容:") 11 12 # 使用 udp 发送数据, 13 udp_socket.sendto(send_msg.encode("utf-8"), ("192.168.xxx.xxx", 9090)) 14 15 # 接收数据,1204表示一次最多接收1024个字节 16 recv_data = udp_socket.recvfrom(1024) 17 recv_msg = recv_data[0] # 所接收的数据内容 18 recv_addr = recv_data[1] # 远程地址 19 20 # 打印远程发送来的信息 21 # 如果是从 windows 发来的数据要用 gbk解码 22 print(str(recv_addr) + ":" + recv_msg.decode("gbk")) 23 24 udp_socket.close()
三、tcp socket
tcp 套接字分为服务器和客户端
3.1 创建 socket,无论客户端和服务器都要写
1 import socket
2
3 # 创建 tcp 的套接字
4 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
5
6 # 关闭套接字
7 tcp_socket.close()
3.2 创建 tcp 客户端 socket,并使用其收发数据
1 import socket 2 3 # 创建套接字 4 tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 5 6 # 连接服务器(!!!区分udp) 7 tcp_client_socket.connect(("192.168.0.102", 7891)) 8 9 # 获取要发送的信息 10 send_msg = input("请输入要发送的信息:") 11 12 # 发送信息 13 tcp_client_socket.send(send_msg.encode("utf-8")) 14 15 # 接收返回来的数据 16 recv_msg = tcp_client_socket.recv(1024) 17 18 tcp_client_socket.close()
3.3 创建 tcp 服务器 socket,并使用其收发数据即:(即:为客户端服务)
1 import socket 2 3 # 创建套接字 4 tcp_ser_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 5 6 # 绑定本地信息 7 tcp_ser_socket.bind(("", 7890)) 8 9 # 变为被动监听套接字(listen) 10 tcp_ser_socket.listen(128) 11 12 # 等待客户端的链接(accept) 13 client_socket, client_addr = tcp_ser_socket.accept() 14 15 # 为链接来的客户端服务,接收客户端发来的数据 16 recv_data = client_socket.recv(1024) 17 18 # 返回数据给客户端,不用再写客户端的地址端口 19 # client_socket.send("hhhhhh".encode("utf-8"),client_addr) 20 client_socket.send("hhhhhh".encode("utf-8")) 21 22 # 关闭套接字 23 client_socket.close() # 关闭服务器方打开的客户端的套接字 24 tcp_ser_socket.close() # 一般不关,关了怎么服务
挥手握手待补充
【本文仅作为学习笔记】