首页 新闻 会员 周边

老师,您好!我写了一个服务端/客户端的socket网络编程,运行客户端出现错误getsockaddrarg: AF_INET address must be tuple, not str

0
[待解决问题]

这是我的服务端代码

from socket import *
from time import ctime

HOST='localhost'
PORT=6969
BUFSIZE=1024
ADDR=(HOST,PORT)

server =socket(AF_INET,SOCK_STREAM) #定义协议类型
server.bind(ADDR) #绑定监听端口
server.listen(5)#监听数量、

while True:
print("等待连接")
conn, addr = server.accept()
print(conn, addr)

print("信息来了")

count=0
while True:
    data=conn.recv(BUFSIZE) 
    print('recv:',data)

    if not data: 
        print("client has ...")
        break
        conn.send('[%s] %s' %(bytes(ctime(),'utf-8'),data)) 
        count+=1
        if count>10:break
conn.close()

server.close() #关闭

客户端

from socket import *
from time import ctime

客户端

HOST='127.0.0.1' #这个变量为空,代表可以使用任意的地址
PORT=6969
BUFSIZE=1024
ADDR=(HOST,PORT)

client=socket(AF_INET,SOCK_STREAM)
client.connect(ADDR)

while True:
data=input('>')
if not data:
break
client.sendto(bytes(data.encode('utf-8')), data)
data=client.recv(BUFSIZE)
if not data:
break
print(bytes(data,'UTF_8'))

client.close()

运行好的错误提示为:getsockaddrarg: AF_INET address must be tuple, not str

凛冬08的主页 凛冬08 | 菜鸟二级 | 园豆:202
提问于:2018-11-25 20:36
< >
分享
所有回答(1)
0

! user/bin/python

服务端

from socket import *
from time import ctime

HOST='localhost'
PORT=6969
BUFSIZE=1024
ADDR=(HOST,PORT)

server =socket(AF_INET,SOCK_STREAM) #定义协议类型
server.bind(ADDR) #绑定监听端口
server.listen(5)#监听数量、

while True:
print("等待连接")
conn, addr = server.accept()
print(conn, addr)

print("信息来了")

count=0
while True:
    data=conn.recv(BUFSIZE).decode('utf-8')
    print('recv:',data)

    if not data:
        print("client has ...")
        break
    conn.send(bytes(ctime(),'utf-8'))
    count+=1
    if count>10:break
conn.close()
server.close() #关闭

客户端

! user/bin/python

from socket import *

客户端

HOST='127.0.0.1' #这个变量为空,代表可以使用任意的地址
PORT=6969
BUFSIZE=1024
ADDR=(HOST,PORT)

client=socket(AF_INET,SOCK_STREAM)
client.connect(ADDR)

while True:
data=input('>')
if not data:
break
client.send(bytes(data.encode('utf-8')))
data=client.recv(BUFSIZE).decode('utf-8')
if not data:
break
print(bytes(data,'UTF_8'))

client.close()
我给你修改了你的代码, 服务端问题:1.你send数据传输的是str类型并没有转换为bytes2.你在接收客户端的数据时没有修改编码;客户端问题:1.TCP协议发送数据使用的是send方法,不是sendto方法,这个方法是在udp使用的,也就是导致你代码报错的原因,因为sendto第二个参数需要一个元祖,而你传的是str 而且一般在udp通信中传递的是地址和端口的元祖
2.客户端在接收数据时也没有考虑编码问题
大概就这几个问题吧 不知道你懂没懂

linux超 | 园豆:291 (菜鸟二级) | 2018-12-06 16:49

谢谢您的帮助,我有段时间没有进来看看了,最近在家里写网络编程的代码的时候也发现了这个问题,编码的灵活的转换还没有掌握完好,我会继续加强!非常感谢您的帮助!希望在未来的时间里我们可以多多交流。

支持(0) 反对(0) 凛冬08 | 园豆:202 (菜鸟二级) | 2019-02-18 17:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册