udp服务器php代码例子,Java客户端PHP服务器UDP穿孔示例代码

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

LdOtV.jpg

我尝试过的

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-要获取其他用户的端口,我手动连接并使用网页上显示的端口.

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: ";

InetAddress IPAddress = InetAddress.getByName();

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数据写入其他客户端.

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

标签:java,php,sockets,udp,hole-punching

来源: https://codeday.me/bug/20191013/1905371.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值