目录
背景知识视频教程
开始7天Python编程 - 国外课栈viadean.com/Begin_Python_Programming_in_7_Days.html#_jcp=2面向初学者的完整Python教程 - 国外课栈viadean.com/python_complete_beginner.html#_jcp=2套接字可以配置为充当服务器并侦听传入的消息,或者作为客户端连接到其他应用程序。连接TCP / IP套接字的两端后,将进行双向通信。
回显服务器
该示例程序基于标准库文档中的示例程序,接收传入的消息并将它们回显给发送者。首先创建一个TCP / IP套接字。
import socket import sys # Create a TCP/IP socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)然后,bind()用于将套接字与服务器地址相关联。在这种情况下,地址是localhost,引用当前服务器,端口号是10000。
# Bind the socket to the port server_address = (localhost, 10000) print >>sys.stderr, starting up on %s port %s % server_address sock.bind(server_address)调用listen()将套接字置于服务器模式,然后accept()等待传入连接。
# Listen for incoming connections sock.listen(1) while True: # Wait for a connection print >>sys.stderr, waiting for a connection connection, client_address = sock.accept()accept()返回服务器与客户端之间的开放连接以及客户端的地址。 该连接实际上是另一个端口(由内核分配)上的另一个套接字。 使用recv()从连接中读取数据,并使用sendall()进行传输。
try: print >>sys.stderr, connection from, client_address # Receive the data in small chunks and retransmit it while True: data = connection.recv(16) print >>sys.stderr, received "%s" % data if data: print >>sys.stderr, sending data back to the client connection.sendall(data) else: print >>sys.stderr, no more data from, client_address break finally: # Clean up the connection connection.close()与客户端的通信完成后,需要使用close()清除连接。此示例使用try:finally块来确保始终调用close(),即使发生错误也是如此。