我今天开始构建一个简单的客户端 - 服务器聊天室,我是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是正确的。
答案 0 :(得分:3)
问题是
HOST = socket.gethostbyaddr('54.201.33.XX')
在你的第二个例子中。 gethostbyaddr返回一个元组,包含(主机名,别名列表,IP地址)。 connect期望一个字符串作为元组的第一个元素,指定要连接的地址和端口。
您可以将其更改为
HOST = '54.201.33.XX'
它应该有用。
答案 1 :(得分:0)
我找到了答案。
在服务器上,HOST = socket.gethostname();在客户端,HOST = '54 .201.33.XX',这是您的服务器IP地址
在EC2中,默认安全设置仅为打开ssh。您应该打开代码中使用的端口。操作如下:
2.1进入AWS控制台并输入EC2
2.2在NETWORK&中找到左侧的安全组。安全
2.3单击您当前的安全组(对我而言,它不是默认组)并在以下信息中打开入站
2.4选择自定义TCP规则并输入您的端口范围(在我的粘贴代码中为21237)并单击添加规则
2.5不要忘记按“应用规则更改”按钮!!!