我正在尝试使用一个online tutorial关于使用标准Python库(版本2.7)的基本客户端 - 服务器套接字编程的示例,但我无法得到该示例在Windows(Vista)下工作。它的工作原理在Ubuntu 11.10很好,所以我知道下面的代码至少在基于UNIX的环境中工作:
在Windows中使用Python,如何通过套接字连接发送和检索任意数量的数据?
import optparse, os, socket, time
def parse_args():
parser = optparse.OptionParser(usage)
help = "The port to listen on. Default to a random available port."
parser.add_option('--port', type='int', help=help)
help = "The interface to listen on. Default is localhost."
parser.add_option('--iface', help=help, default='localhost')
help = "The number of seconds between sending bytes."
parser.add_option('--delay', type='float', help=help, default=.1)
help = "The number of bytes to send at a time."
parser.add_option('--num-bytes', type='int', help=help, default=10)
options, args = parser.parse_args()
if len(args) != 1:
parser.error('Provide exactly one poetry file.')
poetry_file = args[0]
if not os.path.exists(args[0]):
parser.error('No such file: %s' % poetry_file)
return options, poetry_file
def send_poetry(sock, poetry_file, num_bytes, delay):
inputf = open(poetry_file)
while True:
bytes = inputf.read(num_bytes)
if not bytes:
sock.close()
inputf.close()
return
print 'Sending %d bytes' % len(bytes)
try:
sock.sendall(bytes) # this is a blocking call
except socket.error:
sock.close()
inputf.close()
return
time.sleep(delay)
def serve(listen_socket, poetry_file, num_bytes, delay):
while True:
sock, addr = listen_socket.accept()
print 'Somebody at %s wants poetry!' % (addr,)
send_poetry(sock, poetry_file, num_bytes, delay)
def main():
options, poetry_file = parse_args()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((options.iface, options.port or 0))
sock.listen(5)
print 'Serving %s on port %s.' % (poetry_file, sock.getsockname()[1])
serve(sock, poetry_file, options.num_bytes, options.delay)
if __name__ == '__main__':
main()
程序停止只要插座在serve()
调用accept()
响应功能,并且没有收到请求的数据,据我所知。我对Windows对套接字的处理有什么看法?
你怎么知道的程序停止在“接受响应“?你看到“有人想要诗歌”的讯息吗? –
因为我在永远不会到达的声明后面设置了一个断点,所以不,我没有看到“有人想要诗歌”的讯息 – clarkb86
如果你遇到'接受'没有人连接到您的套接字,请尝试telnet连接到端口,下面的答案也有很好的信息 –