我写了一个关于python socket的示例程序,但是在执行示例程序时我遇到了一些问题。
请帮助查看以下代码并告诉我问题发生的原因?谢谢!
问题描述: 服务器套接字被阻止,只需打印以下信息:
tcpServer listen at: 127.0.0.1:9003
('127.0.0.1', 9003)
127.0.0.1:60541 connect
客户端套接字已被阻止,并且未打印任何信息
代码: 服务器端套接字:
import socket
HOST='127.0.0.1'
PORT=9003
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((HOST,PORT))
sock.listen(0)
print('tcpServer listen at: %s:%s\n\r' %(HOST,PORT))
print sock.getsockname()
while True:
client_sock,client_addr=sock.accept()
print('%s:%s connect' %client_addr)
rf = client_sock.makefile('rb',4)
wf = client_sock.makefile('wb',4)
print rf.readlines()
rf.close()
client_sock.close()
wf.write("from server")
wf.flush()
wf.close()
sock.close()
和客户端套接字代码:
import socket
HOST='127.0.0.1'
PORT=9003
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
rf = sock.makefile('rb',4)
wf = sock.makefile('wb',4)
wf.write('hello, tcpServer!')
wf.flush()
wf.close()
recv=rf.readline()
rf.close()
print('[tcpServer said]: %s' % recv)
sock.close()
答案 0 :(得分:0)
服务器依赖于接收文件结束指示,但您永远不会发送一个。尝试在您的客户端中调用socket.shutdown()
:
...
wf.write('hello, tcpServer!')
wf.close()
sock.shutdown(socket.SHUT_WR)
...