0
私は2つのホスト間のコマンドプロンプトチャットをセットアップしようとしています。入力と印刷を同時に行うには、threading
を使用しています。一つのPCは、次のコードでサーバーとして設定されていますスレッドとPythonを使用してサーバーとクライアントのチャット
def recvfun():
for i in range(5):
print c.recv(1024)
return
def sendfun():
for i in range(5):
c.send(raw_input())
return
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
try:
Thread(target = recvfun, args = []).start()
Thread(target = sendfun, args = []).start()
except Exception,errtxt:
print errtxt
c.close() # Close the connection
そして、他のPCには、次のようなコードで設定されています。私は、クライアントとサーバーの両方を実行している現時点で
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
host = "192.168.1.111"
s.connect((host, port))
try:
Thread(target = recvfun, args = []).start()
Thread(target = sendfun, args = []).start()
except Exception,errtxt:
print errtxt
s.close # Close the socket when done
同じマシン上で、2つのコマンドプロンプトを表示します。しかし、私はテキストを送信または受信しようとするたびに、私は、サーバーのコマンドプロンプトで次のエラーログを取得しています:
Got connection from ('192.168.1.111', 25789)
hi
Exception in thread Thread-2:
Traceback (most recent call last):
File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner
self.run()
File "C:\Python27\lib\threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "C:\Python27\programs\server.py", line 12, in sendfun
c.send(raw_input())
File "C:\Python27\lib\socket.py", line 170, in _dummy
raise error(EBADF, 'Bad file descriptor')
error: [Errno 9] Bad file descriptor
あなたのいずれかが、私はこのエラーを取得していますし、それを解決できるか、なぜ私が理解するのに役立ちてもらえ。
ありがとうございます!
ありがとうございます!今それは働いている。スレッドが終了するのを待ってからプログラムを終了する方法を教えてください。 – akhilc
Google「pythonがスレッド終了を待つ」 –