简称套接字,是进程之间通信的一个工具,进程之间想要进行网络通信需要Socket。
Socket负责进程之间的网络数据传输,好比数据的搬运工。
import socket import threading def handle_client(conn, address): """用于处理客户端连接请求""" print(f"客户端地址{address}") while True: # 接收客户端信息,recv接收参数是缓冲区大小,返回值是bytes对象 recv_data = conn.recv(1024).decode("UTF-8") print(f"客户端发来的消息:{recv_data}") msg = input("请输入回复的消息:") if msg == "exit": break conn.send(msg.encode("UTF-8")) conn.close() if name == "main": socket_server = socket.socket() socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 设置端口复用 socket_server.bind(("localhost", 8888)) # 绑定IP和端口 socket_server.listen(128) # 监听端口,最大连接数量128 print("等待客户端连接...") while True: conn, address = socket_server.accept() # 等待客户端连接,accept是个阻塞方法 t = threading.Thread(target=handle_client, args=(conn, address)) t.start() socket_server.close()</code></pre><h2>客户端开发</h2><pre><code class="lang-python">import socket 创建socket对象 socket_client = socket.socket() 连接到服务端 socket_client.connect(("localhost", 8888)) while True: # 发送消息 msg = input("请输入要发给服务端的消息:") if msg == "exit": break socket_client.send(msg.encode("UTF-8")) # 接收服务端消息 recv_data = socket_client.recv(1024).decode("UTF-8") print(f"服务端回复的消息:{recv_data}") 关闭连接 socket_client.close()
不管是recv还是send都不是直接接收到对方的数据和发送数据到对方,发送数据会写入到发送缓冲区,接收数据是从接收缓冲区来读取,发送数据和接收数据最终是由操作系统控制网卡来完成的。
本文作者:a
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!