有关python套接字的问题

时间:2014-04-24 02:26:26

标签: python sockets

我已经完成了一个python套接字服务器脚本。我想通过浏览器连接到它,然后套接字服务器将一些数据发送到浏览器,显示数据消息。   服务器套接字可以接受来自浏览器的请求,但服务器无法向浏览器发送数据消息,浏览器长时间处于阻塞状态。为什么?   服务器套接字脚本如下,请帮我查看这段代码,谢谢!

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)) 
while True: 
  client_sock,client_addr=sock.accept() 
  print('%s:%s connect' %client_addr) 
  while True: 
    recv=client_sock.recv(BUFFER) 
    if not recv: 
      client_sock.close() 
      break 
    print('[Client %s:%s said]:%s' % (client_addr[0],client_addr[1],recv)) 
    client_sock.send('HTTP/1.1 200 OK \n Content-type:text/html\r\n\r\n tcpServer has received your message') 
sock.close() 

1 个答案:

答案 0 :(得分:0)

您只需在发回回复后关闭client_sock

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)) 
while True: 
  client_sock,client_addr=sock.accept() 
  print('%s:%s connect' %client_addr) 
  recv=client_sock.recv(BUFFER) 
  if not recv: 
    client_sock.close() 
    break 
  print('[Client %s:%s said]:%s' % (client_addr[0],client_addr[1],recv)) 
  client_sock.send('HTTP/1.1 200 OK \n Content-type:text/html\r\n\r\n tcpServer has received your message') 
  client_sock.close()
sock.close() 

请注意,这也意味着您需要直接等待另一个连接,因此我已从您的代码中删除了内部循环。