UDP套接字 - 执行多个客户端时列出超出范围

时间:2017-01-21 04:46:01

标签: python python-2.7

服务器端

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

文件存储格式 名称ipaddress端口

在第一个客户端上工作正常,但是当我打开第二个客户端并尝试向第一个客户端发送消息时,它会抛出此错误。第一个客户端能够向第二个客户端发送多条消息。我使用相同的client.py文件来调用客户端连接。

  

回溯(最近一次呼叫最后一次):文件" client.py",第30行,in          port = int(radd [1])IndexError:列表索引超出范围

更好地理解我在每次数据转换后添加了print语句。如果省略套接字发送功能,它可以正常工作,但是使用sendto函数会导致错误,并且打印不会打印出预期的结果。

1 个答案:

答案 0 :(得分:0)

/etc/environment

这个错误基本上意味着你正在访问列表第一个元素但是在第一个位置没有元素。 radd列表可能只包含一个元素。尝试检查并相应地修改程序代码。