视频讲座的一个例子。背景:讲师在python中提供了一个最简单的Web服务器。他创建了一个套接字,绑定它,进行侦听,接受连接,接收数据,并以大写形式将其发送回客户端。然后他说有一个缺点:这个Web服务器是单线程的。然后让我们分叉。
我无法理解这个例子。但首先,程序退出(sys.exit())。但我不能再次运行它了:
socket.error:[Errno 98]地址已在使用中。
我试着找出哪个进程正在侦听端口8080:netstat --listen | grep 8080.没什么。
嗯,8080在听什么?以及如何杀死它?
稍后添加: 有一种感觉,如果我等待一段时间(比如5-10分钟),我可以再次运行该程序。
import os
import socket
import sys
server_socket = socket.socket()
server_socket.bind(('', 8080))
server_socket.listen(10)
print "Listening"
while True:
client_socket, remote_address = server_socket.accept()
print "PID: {}".format(os.getpid())
child_pid = os.fork()
print "child_pid {}".format(child_pid)
if child_pid == 0:
request = client_socket.recv(1024)
client_socket.send(request.upper())
print '(child {}): {}'.format(client_socket.getpeername(), request)
client_socket.close()
sys.exit()
else:
client_socket.close()
server_socket.close()
答案 0 :(得分:0)
正确的netstat用法是:
netstat -tanp
因为您需要-a
选项来显示侦听套接字。添加grep以快速找到您的程序:
netstat -tanp| grep 8080