微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java客户端PHP服务器UDP穿孔示例代码

我正在一个需要pe2p服务器的项目中工作,但是我还没有找到任何Java客户端PHP服务器示例代码.我了解udp打孔工作原理的概念,但是我无法在代码中工作.

enter image description here

我尝试过的

TheSocket.java

public class TheSocket {

public static String response = "hello";
public static String request;
public static String webServerAddress;

public static ServerSocket s;

protected static ServerSocket getServerSocket(int port)throws Exception{
    return new ServerSocket(port);
}

public static void handleRequest(Socket s){
    BufferedReader is;
    PrintWriter os;

    try{
        webServerAddress = s.getInetAddress().toString();
        is = new BufferedReader(new InputStreamReader(s.getInputStream()));

        request = is.readLine();

        System.out.println(request);

        os = new PrintWriter(s.getoutputStream(), true);
        os.println("HTTP/1.0 200");
        os.println("Content-type: text/html");
        os.println("Server-name: TheSocket");
        os.println("Content-length: " + response.length());
        os.println("");
        os.println(response);
        os.flush();
        os.close();
        s.close();

    }catch(Exception e){
        System.out.println("Failed to send response to client: " + e.getMessage());
    }finally{
        if(s != null){
            try{
                s.close();
            }catch(Exception e){
                e.printstacktrace();
            }
        }
    }
    return;
}
}

Main.java

public class Main {

public static void main(String[] args)throws Exception{
    TheSocket.s = TheSocket.getServerSocket(6789);
    while(true){
        Socket serverSocket = TheSocket.s.accept();
        TheSocket.handleRequest(serverSocket);
    }
}

PHP-CONNECT.PHP-要获取其他用户的端口,我手动连接并使用网页上显示的端口.

<?PHP
    echo $_SERVER['REMOTE_ADDR'].':'.$_SERVER['REMOTE_PORT'];
?>

上面代码的问题是,除非我向前移植,否则它无法插入套接字.

有任何问题请发表评论

解决方法:

我面临着类似的问题.并试图以类似的方式解决它.

您的代码的某些部分对我来说似乎是错误的.
Java中的套接字是为TCP创建的,但标题为UDP.因此,您应该使用DatagramSockets.
但是后来我们也陷入了僵局. HTTP请求也使用tcp,因此在关闭tcp会话后,使用HTTP打开端口可能会导致端口损坏. (只是一个猜测)

public class Main {

    public static void main(String[] args) {

        try
        {

            String httpRequest = "GET /index.PHP HTTP/1.1\n" +
                    "Host: <PHP SERVER NAME HERE>";

            InetAddress IPAddress = InetAddress.getByName(<PHP SERVER IP HERE>);

            DatagramSocket clientSocket = new DatagramSocket();
            byte[] sendData = new byte[1024];
            byte[] receiveData = new byte[1024];
            String sentence = httpRequest;
            sendData = sentence.getBytes();

            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 80);
            clientSocket.send(sendPacket);
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            clientSocket.receive(receivePacket);

            String modifiedSentence = new String(receivePacket.getData());
            System.out.println("FROM SERVER:" + modifiedSentence);

            clientSocket.close();

        }catch(Exception e){e.printstacktrace();}

    }


}

上面的代码理论上通过UDP请求发送HTTP.这样显示的端口将是UDP.就我而言,我没有从PHP Server得到任何响应,并停留在clientSocket.recieve(..).我猜是因为我的Web服务器的防火墙阻止了udp数据包.
如果该代码对任何人都有效,则我将这样进行:

>将所有可访问的ip和端口保存到数据库中,并将它们列出给其他客户端.
>将Data像上面的DatagramPackets中的ur数据写入其他客户端.

希望对您有所帮助.如果有人可以完全使用它,我也会对此感兴趣:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐