直接进入正题。
今天在进行一个socket编程时,遇到了如题这样的问题。
image.png这个问题很常见,有的是爬虫方面的,五花八门的,查了一圈发现没有解决我的问题的内容,接下来就分享下我遇到的问题和我的解决方案吧。
问题背景
环境:win10,Pycharm,python
今天在进行socket编程时,遇到上图的问题。
我需要在本地客户端与服务器端建立通信,简化后的情景如下:
服务器端程序:
# -*- coding: utf-8 -*-
import socket
hostname = socket.gethostname()
host = socket.gethostbyname(hostname)
# host = 服务器内网ip
port = 8080
# 端口
web = socket.socket()
web.bind((host, port))
web.listen(5)
print("start")
while True:
conn, addr = web.accept()
data = conn.recv(1024)
print(data)
conn.sendall(b'hello')
conn.close()
客户端程序:
# -*- coding: utf-8 -*-
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "公网ip"
# host = 服务器公网ip
port = 8080
# 端口
s.connect((host, port))
send_data = input("input:")
s.send(send_data.encode())
rec_data = s.recv(1024).decode()
print("close scoket", rec_data)
s.close()
先运行服务器端程序(使用Pycharm ssh连接到服务器):
start
运行客户端程序(本地),一会儿出现:
image.png首先查看腾讯云安全组:
image.png该端口是开放的,一切正常。
那是什么原因呢?我在的博客中写过,Ubuntu 服务器利用Apache 2搭建一个简单的网站。在安装完Apache 2后,有一步是在UFW上允许Apache,会不会是防火墙没有开放端口呢?
ssh连接到服务器
输入:
sudo ufw status
image.png
发现Apache已经在运行中,但是服务器UFW并没有允许预期端口8080,此时,我们开放8080端口。
sudo ufw allow 8080
image.png
再次查看UFW状态:
image.png可以看到8080端口已经开放了。
再来试试之前的程序。
服务端:
image.png客户端:
image.png类似的,实现多个客户端与服务端通信等等其他功能也可以相继展开了。
对于UFW,开启和关闭防火墙:
sudo ufw enable|disable
查看防火墙状态
sudo ufw status
开启和禁用端口如下:
sudo ufw allow|deny [service]
至此,我的问题解决了,标题问题出现的原因可能有很多,这里是我个人遇到我的问题,以及自己的解决方案,解决了自己的问题,对于同样的问题有可能就不适用了。
网友评论