現在ソケット通信を用いてデータのやり取りを行うプログラムを作成しております
その際に接続待ち受けというものを行わないと
OSError: [Errno 22] Invalid argument
と表示され実行ができません。
このlistenがどのような役割を担っているのか調べたところ、並列処理の個数を決めるとのことでしたが
消した場合に実行時エラーが出る理屈がわかりません。
どなたか理由をご存じでしたら教えていただけると幸いです。
Python1
1# -*- coding:utf-8 -*- 2import socket 3 4host = socket.gethostname() #ホスト名取得 5port = 8080 #PORT指定(クライアントと一致していればOK) 6 7serversock = socket.socket(socket.AF_INET6,socket.SOCK_STREAM) #オブジェクトの作成 8serversock.bind((host,port)) #IPとPORTを指定してバインドします 9serversock.listen(1) #接続の待ち受けをします(キューの最大数を指定) 10 11print('Waiting for connections...') 12clientsock, client_address = serversock.accept() #接続されればデータを格納 13 14while True: 15 16 #strでクライアントプログラムからの入力を受け取る 17 rcvmsg = clientsock.recv(4096).decode() 18 #入力された文字列がexitであった場合、その時点で処理終了 19 if rcvmsg == 'exit': 20 break 21 22 #数値単独の場合そのまま代入 23 if(str.isdigit(rcvmsg))==True: 24 sndmsg=rcvmsg 25 sndmsg=str(sndmsg) 26 27 clientsock.sendall(sndmsg.encode('utf-8')) #メッセージを返します 28 29#クローズ処理 30print("Now Closing") 31clientsock.close()
Python2
1# -*- coding:utf-8 -*- 2import socket 3 4host = socket.gethostname() #ホスト名取得 5port = 8080 #PORT指定(クライアントと一致していればOK) 6 7client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #オブジェクトの作成 8 9client.connect((host, port)) #これでサーバーに接続します 10 11massage=0 #message初期値 12 13print("計算を行います、終了する場合は'exit'と入力してください") 14 15while massage != 'exit': 16 print("Send Message") 17 18 massage=input() 19 20 #入力ない場合は送信しない 21 if not massage: 22 print("文字を入力してください") 23 else: 24 client.send(massage.encode('utf-8')) #サーバープログラムにデータ送信 25 26 response = client.recv(4096).decode() #サーバーの処理結果受信(レシーブは適当な2の累乗) 27 28 print(response) 29 30print("計算を終了します") 31client.close()
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/19 13:23