vultr 云主机收不到来自客户端的udp数据包

问题:vultr 云主机收不到来自客户端的udp数据包

解决方案:

1.登录vultr云主机管理后台,https://my.vultr.com/,点击左侧菜单栏中servers,会看到类似于如下的界面,然后,点击其中的Firewall,去配置防火墙规则,与国内的云主机防火墙配置基本相同

2.点击Add Firewall Group,然后输入名字,然后,添加相应的规则,如下图所示,添加对应的规则:


3.然后,点击防火墙配置组中的,Linked Instances,将设置的规则,绑定到对应的云主机上

4.测试此时是否,服务器能收到客户端发送的udp包,如果能收到,则表示正常,如果不能收到,则需要检查,服务器的防火墙是否打开了

5.检测防火墙状态,以centOS 7 为例,如果,防火墙状态为 running ,则firewall-cmd --permanent --list-port检查,对应的端口是否放开,如果没有放开的话,则需要放开相应的端口,firewall-cmd --zone=public --add-port=53/udp --permanent 

6.再次测试,应该就可以了

代码:

public class UdpServer {

    public static void main(String[] args) throws IOException {
        InetAddress inetAddress = InetAddress.getLocalHost();
        System.out.println(inetAddress.getHostAddress());
        DatagramSocket udpServer = new DatagramSocket(60188,inetAddress);
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf,buf.length);
        System.out.println("start at port 7777...........");
        while (true){
            udpServer.receive(packet);
            String receiverStr = new String(packet.getData());
            System.out.println("==============="+packet.getSocketAddress()+"===============receiveStr:"+receiverStr);
        }

    }
}
public class UdpClient {
    public static void main(String[] args) throws IOException, InterruptedException {
        DatagramSocket udpClient = new DatagramSocket();
        String str1 = "hello-udpServer,I'm-client";

        InetAddress address = InetAddress.getByName("*.*.*.*");//此处需要换成公网IP
        DatagramPacket packet = new DatagramPacket(str1.getBytes(),str1.getBytes().length,address,1234);
        int i = 0;
        while (i < 500){
            udpClient.send(packet);
            i++;
            Thread.sleep(1000);
            System.out.println(i);
        }

    }
}


Firewall开启常见端口命令:

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=53/udp --permanent

Firewall关闭常见端口命令:

firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --remove-port=443/tcp --permanent
firewall-cmd --zone=public --remove-port=22/tcp --permanent
firewall-cmd --zone=public --remove-port=21/tcp --permanent
firewall-cmd --zone=public --remove-port=53/udp --permanent

批量添加区间端口

firewall-cmd --zone=public --add-port=4400-4600/udp --permanent
firewall-cmd --zone=public --add-port=4400-4600/tcp --permanent

开启防火墙命令:

systemctl start firewalld.service

重启防火墙命令:

firewall-cmd --reload  或者   service firewalld restart

查看端口列表:

firewall-cmd --permanent --list-port

禁用防火墙

systemctl stop firewalld

设置开机启动

systemctl enable firewalld

停止并禁用开机启动

sytemctl disable firewalld

查看状态

systemctl status firewalld或者 firewall-cmd --state


猜你喜欢

转载自blog.csdn.net/bolatu_youshang/article/details/80951853