Python套接字错误:无法隐式地将'tuple'对象转换为str

时间:2014-02-06 11:08:48

标签: python sockets

我今天开始构建一个简单的客户端 - 服务器聊天室,我是Python和网络连接的新手。我在服务器上做了一个简单的代码:

HOST = socket.gethostname()
PORT = 21238
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))

在客户端:

HOST = socket.gethostbyaddr('54.201.33.XX') #54.201.33.XX is my EC2 public IP
PORT = 21237
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

我已经在服务器上运行服务器代码,当我尝试在PC上运行客户端代码时。我收到了错误:

Traceback (most recent call last):
    s.connect((HOST, PORT))
TypeError: Can't convert 'tuple' object to str implicitly

我找到了一些示例代码,但他们都使用本地主机。谢谢你的帮助。

/////

基于@Jon S.的回答。我的客户端代码应该是

HOST = '54.201.33.XX'

但仍有时间连接到服务器。我确信我的ip是正确的。

2 个答案:

答案 0 :(得分:3)

问题是

HOST = socket.gethostbyaddr('54.201.33.XX')

在你的第二个例子中。 gethostbyaddr返回一个元组,包含(主机名,别名列表,IP地址)。 connect期望一个字符串作为元组的第一个元素,指定要连接的地址和端口。

您可以将其更改为

HOST = '54.201.33.XX'

它应该有用。

答案 1 :(得分:0)

我找到了答案。

  1. 在服务器上,HOST = socket.gethostname();在客户端,HOST = '54 .201.33.XX',这是您的服务器IP地址

  2. 在EC2中,默认安全设置仅为打开ssh。您应该打开代码中使用的端口。操作如下:

    2.1进入AWS控制台并输入EC2

    2.2在NETWORK&中找到左侧的安全组。安全

    2.3单击您当前的安全组(对我而言,它不是默认组)并在以下信息中打开入站

    2.4选择自定义TCP规则并输入您的端口范围(在我的粘贴代码中为21237)并单击添加规则

    2.5不要忘记按“应用规则更改”按钮!!!