ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 2.7 套接字编程 互联网应用程序使用的协议分为两种: * 实现在协议标准中的协议 * 专用的网络应用程序,使用的协议不公开 每一个进程可以拥有一至多个套接字,系统通过端口号(Port Number)标识套接字。 ### 2.7.1 UDP套接字编程 客户端脚本: ```py from socket import * # server_name为服务进程所在主机ip server_name = 'hostname' server_port = 12000 # SOCK_DGRAM 指明套接字使用UDP传输 client_socket = socket(AF_INET, SOCK_DGRAM) message = 'keshuai' client_socket.sendto(message, (server_name, server_port)) modified_message, server_address = client_socket.recvfrom(2048) print modified_message client_socket.close() ``` 服务端脚本: ```py from socket import * server_port = 12000 server_socket = socket(AF_INET, SOCK_DGRAM) server_socket.bind(('', server_port)) print "The server is ready to receive" while True: message, client_address = server_socket.recvfrom(2048) print "Recieve: %s" % message modified_message = message.upper() server_socket.sendto(modified_message, client_address) ``` ### 2.7.2 TCP套接字编程 特殊的套接字实现TCP三次握手: ![](https://img.kancloud.cn/17/f5/17f57c17081fe3f72e16c753d330a484_455x437.png) 客户端脚本: ```py from socket import * server_name = '172.23.83.57' server_port = 12000 # SOCK_STREAM指明套接字使用TCP传输 client_socket = socket(AF_INET, SOCK_STREAM) client_socket.connect((server_name, server_port)) message = 'keshuai' client_socket.send(message) modified_message = client_socket.recv(2048) print modified_message client_socket.close() ``` 服务端脚本: ```py from socket import * server_port = 12000 server_socket = socket(AF_INET, SOCK_STREAM) server_socket.bind(('', server_port)) server_socket.listen(1) print "The server is ready to receive" while True: connection_socket, client_address = server_socket.accept() message = connection_socket.recv(2048) print "Recieve: %s" % message modified_message = message.upper() connection_socket.send(modified_message) connection_socket.close() ```