サーバー側UDPソケット - 複数のクライアントが実行されている範囲外のリスト
def address(x):
radd=(1,1)
f=open("name.list","rb")
for list in f:
list=list.split()
if(list[0]==x):
radd=(list[1],list[2])
break
return radd
f.close()
while True:
data=recvfrom(1024)
elif (data[0] == "send"):
f=open("name.list","rb")
add=address(data[1])
radd=add[0] + " " + add[1]
for list in f:
name=list.split()
if(int(addr[1])==int(name[2])):
s.sendto(str(radd),addr)
break
else:
s.sendto("not logged in ",addr)
f.close()
クライアント側
input="send usrname message"
s.sendto(input,server)
while True:
if (input[0]=="send"):
radd,add=s.recvfrom(1024)
print radd
radd=radd.split()
print radd
ip=radd[0]
print ip
port=int(radd[1])
print port
radd=(ip,port)
s.sendto(input[2],radd)
continue
形式 名前でファイルストアは、ポート
が上正常に動作しますIPアドレス最初のクライアントですが、2番目のクライアントを開いて最初のクライアントにメッセージを送信しようとすると、このエラーがスローされます。最初のクライアントは2番目のクライアントに複数のメッセージを送信できます。私はクライアント接続を呼び出すために同じclient.pyファイルを使用しました。
Traceback (most recent call last): File "client.py", line 30, in port=int(radd[1]) IndexError: list index out of range
私はそれぞれのデータ変換後にprint文を追加しました。私はソケットsend関数を省略すると、それは完全に正常に動作しますが、sendto関数を使用すると、エラーが発生し、printが期待した結果を出力しません。
最初のソケットから予想されるアドレスの形式は何ですか? "ip:port"という形式の場合は、.split()の代わりに.split( ":")を使用してください。 – Saulpila
str(ip port) –
あなたは印刷ステートメントの出力を投稿しますか?そしてメモとして、実行するために 'f.close()'は 'return radd'の前に行かなければなりません(サーバスクリプトの終わりで)。 – Saulpila