Python版Socket(套接字)应用-客户端和服务器

背景知识视频教程

开始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(),即使发生错误也是如此。

回显客户端

简单客户端连接

选择侦听地址

多线程服务器

视频演示+文本内容

发送和接受数据缓冲和流数据使用套接字发送和接收Python对象在Python中使用套接字创建聊天应用程序服务器在Python中使用套接字创建聊天应用程序客户端