企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## Socket 百度百科上对Socket的解释是:Socket通常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。 ## Socket通信 下面图是socket服务器与客户端通信的过程,接下来我们简单讲一下编程 <div align="center"><img src="images/screenshot_1560395848760.png"/></div> 使用socket通信,首先导入socket模块 ```python import socket ``` ### TCP服务器 1. 服务器创建套接字,绑定套接字到本地IP与端口 socket(family, type[, protocal])使用给定的套接族,套接字类型,协议编号(默认为0)来创建套接字。 ```python s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind() ``` 2. 开始监听链接 s.listen(backlog) backlog为拒绝链接前,系统可以挂起的最大连接数,至少为1。 ```python s.listen(2) ``` 3. 进入循环,不断接收客户端的链接请求 ```python while True: s.accept() ``` accept()接受TCP链接并返回(conn, address),其中conn是新的套接字对象,可以用来接收和发送数据,address是链接客户端的地址。 4. 接收客户端传来的数据,并且给对方发数据 ```python s.recv() s.sendall() ``` 注意: 服务器与客户端不能直接发送列表,元素,字典等带有数据类型的格式,发送的内容必须是字符串数据。 5. 传输完毕后,关闭套接字。 ```python s.close() ``` #### 简单的服务器端代码 ```python import socket HOST, PORT = '', 8000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(5) print "Server start at:%s:%s" %(HOST, PORT) print "wait for connection..." while True: conn, addr = s.accept() print "Connected", addr while True: data = conn.recv(1024) print data conn.send("server received you message.") conn.close() s.close() ``` TCP客户端 1. 创建套接字并链接至远端地址(服务器) ```python s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect() ``` 客户端调用connect()方法来建立与服务器的链接,并开始三次握手。握手保证了客户端可以正常连接到服务器,反之亦然。 2. 连接后发送数据和接收数据 ```python s.sendall() s.recv() ``` 3. 传输完毕后关闭套接字 ```python s.close() ``` #### 简单的客户端代码 ```python import socket HOST, PORT = '192.168.0. 118', 8000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) while True: cmd = raw_input("Input msg:") s.send(cmd) data = s.recv(1024) print data s.close() ``` 参考:https://blog.51cto.com/loufeng/2340821