python tcp 服务端
时间: 2023-11-13 22:54:48 浏览: 47
好的,以下是 Python TCP 服务端的代码示例:
```python
import socket
HOST = '127.0.0.1' # 监听的IP地址
PORT = 8888 # 监听的端口号
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
server_socket.bind((HOST, PORT))
# 开始监听
server_socket.listen(1)
print('等待客户端连接...')
# 等待客户端连接
client_socket, client_address = server_socket.accept()
print('客户端已连接:', client_address)
while True:
# 接收客户端发送的数据
data = client_socket.recv(1024)
if not data:
break
print('收到客户端消息:', data.decode())
# 发送响应数据给客户端
response = 'Hello, client!'
client_socket.sendall(response.encode())
# 关闭连接
client_socket.close()
server_socket.close()
```
相关问题
python TCP服务端接收多个客户端数据的程序
可以通过多线程或者异步IO实现TCP服务端接收多个客户端数据,以下是一个基于多线程的示例程序:
```python
import socket
import threading
def handle_client(client_socket):
while True:
data = client_socket.recv(1024)
if not data:
break
# 处理客户端数据
response = b"Hello, client!"
client_socket.send(response)
client_socket.close()
def run_server():
host = "127.0.0.1"
port = 8888
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(5)
print(f"Listening on {host}:{port}...")
while True:
client_socket, client_address = server_socket.accept()
print(f"Accepted connection from {client_address[0]}:{client_address[1]}")
client_handler = threading.Thread(target=handle_client, args=(client_socket,))
client_handler.start()
if __name__ == "__main__":
run_server()
```
此程序会监听本地8888端口,处每个客户端连接会启动一个新的线程来处理客户端数据。
python TCP 服务端实时监控所有客户端是否连接的程序
可以使用 select 模块实现。首先创建一个 socket 实例用于监听客户端的连接,然后使用 select 监听该 socket 的读事件和所有已连接客户端 socket 的读事件。当接收到一个新连接时,加入到监听列表中,当其中一个连接关闭时,将其从监听列表中移除即可实时监控所有客户端的连接状态。具体实现可以参考以下代码:
```
import select
import socket
SERVER_HOST = 'localhost'
SERVER_PORT = 5000
BACKLOG = 5
# 创建监听socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((SERVER_HOST, SERVER_PORT))
server_socket.listen(BACKLOG)
# 初始化监听列表,添加监听socket
sockets_list = [server_socket]
print(f'Server started on {SERVER_HOST}:{SERVER_PORT}')
while True:
# 使用select监听sockets_list中的socket
read_sockets, _, exception_sockets = select.select(sockets_list, [], sockets_list)
# 处理每个可读的socket
for sock in read_sockets:
# 如果是监听socket接收到了一个新连接
if sock == server_socket:
client_sock, client_addr = server_socket.accept()
sockets_list.append(client_sock)
print(f'Client connected from {client_addr[0]}:{client_addr[1]}')
# 如果是已连接的客户端socket,接收并处理数据
else:
try:
data = sock.recv(1024)
# 如果返回空数据表示连接已关闭,移除socket并关闭连接
if not data:
print(f'Client disconnected from {sock.getpeername()[0]}:{sock.getpeername()[1]}')
sockets_list.remove(sock)
sock.close()
else:
print(f'Received data from {sock.getpeername()[0]}:{sock.getpeername()[1]}: {data.decode().strip()}')
except:
# 发生异常表示连接异常,移除socket并关闭连接
print(f'Client disconnected from {sock.getpeername()[0]}:{sock.getpeername()[1]}')
sockets_list.remove(sock)
sock.close()
# 处理异常socket,移除socket并关闭连接
for sock in exception_sockets:
print(f'Exception occured on {sock.getpeername()[0]}:{sock.getpeername()[1]}')
sockets_list.remove(sock)
sock.close()
```
需要注意的是,这只是一个简单的示例,实际使用时可以根据具体需求进行调整和改进。