编写一个多进程TCP服务器程序,每当有一个客户端连接它的时候,它都向客户端程序回 复这是第几个连接服务器的客户端。
时间: 2024-03-15 15:47:57 浏览: 55
多线程服务器端程序(支持多台客户端建立连接并向所有客户端转发收到的消息)
下面是一个Python语言的多进程TCP服务器程序示例,它能够实现每当有一个客户端连接时,向客户端程序回复这是第几个连接服务器的客户端的功能。
```python
import socket
import os
import signal
def handle_request(conn, addr, client_count):
print("New client connected:", addr)
conn.send(f"Hello, you are the {client_count}th client connected to the server.".encode())
conn.close()
def handle_sigchld(signum, frame):
while True:
try:
pid, status = os.waitpid(-1, os.WNOHANG)
except OSError:
return
if pid == 0:
return
def main():
server_addr = ('', 8888)
backlog = 5
client_count = 0
# 创建套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器地址
server_socket.bind(server_addr)
# 监听客户端连接
server_socket.listen(backlog)
print("Listening on", server_addr)
# 处理子进程退出信号
signal.signal(signal.SIGCHLD, handle_sigchld)
while True:
# 接受客户端连接请求
conn, addr = server_socket.accept()
client_count += 1
# 创建子进程
pid = os.fork()
if pid == 0: # 子进程
server_socket.close() # 子进程不需要监听,关闭监听套接字
handle_request(conn, addr, client_count)
os._exit(0)
else:
conn.close() # 父进程不需要与客户端通信,关闭连接套接字
if __name__ == '__main__':
main()
```
程序中使用了fork()函数创建子进程来处理客户端连接,父进程负责监听客户端连接请求,并在接收到连接请求时创建子进程。每个子进程都可以独立地与客户端通信,处理完请求后退出。同时,使用了signal模块处理子进程退出信号,防止子进程变成僵尸进程。
阅读全文