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()  # 一般不关,关了怎么服务

挥手握手待补充

【本文仅作为学习笔记】

原文地址:https://www.cnblogs.com/ykit/p/11319614.html