0

我目前正在使用 Python 开发服务器,我面临的问题是客户端无法从服务器检索发送的数据。

服务器的代码是:

import sys
import socket
from threading import Thread

allClients=[]

class Client(Thread):

    def __init__(self,clientSocket):
                Thread.__init__(self)
                self.sockfd = clientSocket #socket client
                self.name = ""
                self.nickName = ""

    def newClientConnect(self):

      allClients.append(self.sockfd)
      while True:
            while True:
                try:
                    rm= self.sockfd.recv(1024)
                    print rm

                    try:
                        self.sockfd.sendall("\n Test text to check send.")
                        print "Data send successfull"
                        break


                    except socket.error, e:
                        print "Could not send data"

                    break

                except ValueError:
                       self.sockfd.send("\n Could not connect properly")


    def run(self):
                self.newClientConnect()
                self.sockfd.close() 
                while True:
                        buff = self.sockfd.recv(1024)

                        if buff.strip() == 'quit':
                            self.sockfd.close()
                            break # Exit when break
                        else:
                            self.sendAll(buff)
#Main
if __name__ == "__main__":

    #Server Connection to socket:
    IP = '127.0.0.1'
    PORT = 80
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR,1)

    print ("Server Started")
    try:
        serversocket.bind(('',5000))
    except ValueError,e:
        print e
    serversocket.listen(5)

while True:
        (clientSocket, address) = serversocket.accept()
        print 'New connection from ', address
        ct = Client(clientSocket)
        ct.start()

__all__ = ['allClients','Client']

#-- 

客户端连接是:

import socket

HOST = '192.168.1.4'    # The remote host
PORT = 5000              # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

data = s.recv(1024)
s.close()
print 'Received', data#repr(data)

需要一个快速的解决方案....谢谢,

4

4 回答 4

0

简短的解决方案

sleep在 .之后添加一个简短的connect.

import time
time.sleep(3)
于 2012-09-19T06:30:59.657 回答
0

等待响应:

with s.makefile('rb') as f:
     data = f.read() # block until the whole response is read
s.close()

您的代码中有多个问题:

  • 嵌套while True不中断
  • finally: ..close()之前执行 except ValueError: ..send
  • self.sockfd.close()
  • ETC

此外,您可能应该使用.sendall()而不是.send().

于 2012-09-19T06:53:48.937 回答
0

你的服务器代码除了客户端先发送一些东西,

rm= self.sockfd.recv(1024)

但我在您的代码中看不到任何内容

请尝试在您的客户端代码中发送一些内容

s.connect((HOST, PORT))
s.send("hello")
于 2012-09-19T07:26:44.140 回答
0

我测试了你的代码,当我注释掉时

rm= self.sockfd.recv(1024)
print rm

它工作得很好。基本上,服务器停在那里等待从未出现的消息。如果它仍然不适合您,则可能有两个问题。要么你有防火墙以某种方式阻止连接,要么你有旧服务器在后台运行,之前的尝试实际上并没有被杀死。如果 pythonw.exe 或等效程序在不应该运行时正在运行,请检查您的进程,然后将其杀死。

于 2012-09-19T08:11:37.160 回答