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

あなたのサーバーコードは、クライアントが最初に何かを送信することを除いて、

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

それはうまくいきました。基本的に、サーバーはそこで停止して、メッセージが来ないのを待ちました。それでもうまくいかない場合は、2 つの問題が考えられます。どういうわけか接続をブロックするファイアウォールがあるか、実際には強制終了されなかった以前の試行からバックグラウンドで実行されている古いサーバーがあります。pythonw.exe または同等のものが実行されていないかどうかプロセスを確認し、実行してはいけません。

于 2012-09-19T08:11:37.160 に答える
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()

また、おそらく.sendall()の代わりに使用する必要があり.send()ます。

于 2012-09-19T06:53:48.937 に答える