Socket TCP原语
用Socket进行网络开发需了解服务器和客户端的Socket原语,每个原语在不同的高级语言中都有相应的实现方式.
TCP的Socket原语,如图所示.所有基于TCP的Socket通信都遵循如图所示的流程,下面解释每个原语的含义.
下面是Python演示Socket的编程方法, TCP服务器端的代码如下:
# @Coding: utf-8 # @Time: 2021/8/3 3:13 import socket HOST = "0.0.0.0" PORT = 8080 def start_socket(host, port): so = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立Socket连接, AF_INEF说明使用IPv4地址, SOCK_STREAM指明TCP协议 so.bind((host, port)) # 绑定IP和端口 so.listen(1) # 监听 while True: conn, addr = so.accept() # 接收TCP连接, 并返回新的Socket对象 print(f"Client: {addr} connected") # 打印客户端的IP message = "Connection Success" conn.send(message.encode(‘utf8‘)) # 向客户端发送当前的时间, send()函数接收的参数为bytes类型, data = conn.recv(1024) # 接收客户端发送的数据 print(data) conn.close() # 关闭连接 if __name__ == ‘__main__‘: start_socket(HOST, PORT)
TCP客户端对应的代码
# @Coding: utf-8 # @Time: 2021/8/3 3:45 下午 import socket HOST = ‘127.0.0.1‘ PORT = 8080 def init_socket(): so = socket.socket(socket.AF_INET, socket.SOCK_STREAM) return so def connect_server(so, host, port, message): so.connect((host, port)) # 连接服务器端 data = so.recv(1024) # 接收数据 print(f"get message: {data}") so.send(f"{message}".encode(‘utf8‘)) # 发送数据 so.close() # 关闭连接 if __name__ == ‘__main__‘: connect_server(init_socket(), HOST, PORT, "Hello")
先运行server.py, 然后运行client.py 就可以看到client打印了 get message: b‘Connection Success‘ 并退出. 服务器端打印 Client: (‘127.0.0.1‘, 65358) connected b‘Hello‘ 并阻塞
注意: 客户端的Socket端口号由系统自动分配
原文:https://www.cnblogs.com/wender/p/15095532.html