環境はMacです。バージョンはPython 2.7.18。
目指しているプログラムの内容は、以下の通りです。
TCPでクライアント-1とクライアント-2は、両方のサーバーServer-1,Server-2にデータを送信できるようにします。各クライアントの画面に、サーバーのIPアドレスとポート番号を表示します。順番としては、クライアントを一つ増やす>サーバーを一つ増やす感じです。
今現在は一つのクライアントに一つのサーバーとの通信まではうまくいっています。そこからクライアントを2つに増やそうとしているところです。しかし、ここで一つのクライアントしか反映されません。どうすればいいでしょうか?
クライアントを増やす時のコードの修正のやり方は、別のターミナルウィンドウを開き、そのウィンドウでクライアントclient-2を実行します。
TCPClient
1from thread import start_new_thread 2#import _thread 3from socket import * 4import time 5 6# Create a connect to Server 1 7server1Name = '127.0.0.1' # IP address of your server 8server1Port = 12000 9destAddress1 = (server1Name,server1Port) 10clientSocket1 = socket(AF_INET, SOCK_STREAM) 11clientSocket1.connect(destAddress1) 12 13#### Q4 14# Create a connect to Server 2 15server2Name = '127.0.0.1' # IP address of your server 16server2Port = 12000 17destAddress2 = (server1Name,server2Port) 18clientSocket2 = socket(AF_INET, SOCK_STREAM) 19clientSocket2.connect(destAddress2) 20#......................................... 21 22 23 24def connectServer(clientSocket,sentence): 25 clientSocket.send(sentence.encode()) 26 modifiedSentence = clientSocket.recv(1024) 27 print(modifiedSentence.decode()) 28 29 30#while True: 31# sentence = input("Input lowercase sentence:") 32 connectServer(clientSocket1,sentence) 33#コマンドを使用して、Server-2にデータを送信します 34 connectServer(clientSocket2,sentence) 35 36 #clientSocket.send(sentence) 37 modifiedSentence = clientSocket.recv(1024) 38 print (modifiedSentence) 39 print('Address: %f . Port: %f.' %()) 40 41clientSocket1.close() 42clientSocket2.close() 43 44#close other sockets here 45
TCPServer
1#import _thread 2from thread import start_new_thread 3from socket import * 4 5def handleClient(connectionSocket): 6 while True: 7 sentence = connectionSocket.recv(1024) 8 capitalizedSentence = sentence.upper() 9 connectionSocket.send(capitalizedSentence) 10 connectionSocket.close() 11 12serverPort = 12000 13serverSocket = socket(AF_INET,SOCK_STREAM) 14serverSocket.bind(('',serverPort)) 15serverSocket.listen(1) 16print("The server is ready to receive") 17while True: 18 connectionSocket, clientAddress = serverSocket.accept() 19 print '(Client Address,Port): ' + str(clientAddress) 20 21 22 #Note: for question-2, replace this loop by the thread call 23 #while True: 24 # sentence = connectionSocket.recv(1024) 25 # capitalizedSentence = sentence.upper() 26 # connectionSocket.send(capitalizedSentence) 27 #connectionSocket.close() 28 29 #このスレッド呼び出しでは、各クライアント用にスレッド(ソケット付き)が作成されます。 30 _thread.start_new_thread(handleClient,(connectionSocket,)) 31 ############## 32 33
Terminal
1$python TCPServer.py 2 3The server is ready to receive 4(Client Address,Port): ('127.0.0.1', 55816) 5Traceback (most recent call last): 6 File "TCPServer.py", line 31, in <module> 7 _thread.start_new_thread(handleClient,(connectionSocket,)) 8NameError: name '_thread' is not defined
あなたの回答
tips
プレビュー