Windows 7上的套接字无法连接

时间:2013-06-23 18:27:08

标签: python sockets windows-7

尝试创建我的第一个客户端 - 服务器应用程序遇到了错误...... 此代码与文档中的完全相同,但我遇到了问题。

服务器:

import socket

HOST = 'localhost'
PORT = 9090

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while True:
    data = conn.recv(1024)
    if not data: break

print data
conn.close()

客户端:

import socket

HOST = 'localhost'
PORT = 9090
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
s.close()

执行后,我在服务器部分看不到消息print Connected by, addrprint data

我使用Windows 7,Comodo防火墙(我试图关闭防火墙,但它没有解决问题),Avast Antivirus,Python 2.7。

非常有趣,一切正常,只是在一瞬间不起作用。

此外,我的服务器应用程序只是冻结,直到客户端连接到服务器。它可以解决使用线程吗?

抱歉我的英语不好。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您需要在循环中accept()print。 (或使用两个循环)。我对Python中的套接字编程不是很熟悉,但我猜它看起来像这样。 (完全未经测试!)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)

while True:
    conn, addr = s.accept()
    print 'Connected by', addr

    while True:
        data = conn.recv(1024)
        if not data: 
            break

        print data
    conn.close()

答案 1 :(得分:0)

+1到Cfreak。基本上数据发生的是它被分配一个空字符串,导致循环中断。因此将print语句放在循环中可以解决问题。假设您需要在循环终止后访问该数据,请尝试类似

的内容
data = []
while True:
    datum = conn.recv(1024)
    data.append(datum)
    if not datum: break

print " ".join(data)

以下是我正在运行的代码和我的计算机,它的工作原理

客户端

import socket
HOST = 'localhost'
PORT = 9090
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
s.close()

服务器

import socket

HOST = 'localhost'
PORT = 9090

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
data = []
while True:
    datum = conn.recv(1024)
    data.append(datum)
    if not datum: break

print " ".join(data)

conn.close()

所以我不认为你的代码有问题......如果你的机器上没有防火墙/防病毒软件,那就试试那台机器上的程序。