JAVA用udp从本地网络穿透到公网之后,从其他网络作为客户端发送udp包到服务器正常接收。

JAVA用udp从本地网络穿透到公网之后,从其他网络作为客户端发送udp包到服务器正常接收。,第1张

你说的还不清楚。Java网络编程使用Socket,同为一个网络下的主机时是肯定没问题的,不论同一局域网或广域网。如果内网跨越网关,我没做过试验,按我的理解,内网主机做客户端,独立主机做服务器应该可行,反之不行。

三个问题一个答案,什么都不会发生

原因:tcp、udp server程序无非是绑定了一个特定的端口,但是client端使用的端口都是随机产生的,没人说client 和server 的tcp和udp端口必须一致哦

建议你去了解下tcp ip的运作机制,就比较容易理解了

你没有贴出代码,我估计是你使用固定长度取的缓冲区的数据

你可以参考下面的代码改一下试试

public class Server

{

static final int size = 10240;

static String usrDir = SystemgetProperty("userdir");

static String DiskInfoXML = usrDir + "disk_infoxml";

public static void main(String argv[])

{

DatagramSocket sd = null;

DatagramPacket packet = null;

String diskRequest;

try

{

sd = new DatagramSocket(7777); // 建立socket连接

Systemoutprintln("Server Started ");

while(true) // 一直监听

{

byte[] buffer = new byte[size];

packet = new DatagramPacket(buffer, size);

sdreceive(packet);

byte[] data = packetgetData();

int port = packetgetPort();

int len = packetgetLength();

InetAddress address = packetgetAddress();

diskRequest = new String(buffer); // 打印获取内容

Systemoutprintln("diskRequest = \n" + diskRequest);

FileOutputStream fout = new FileOutputStream(DiskInfoXML);

foutwrite(buffer, 0, len); // 写进文件

foutclose();

Systemoutprintln(len + " bytes received");

}

}

catch (SocketException e)

{

Systemoutprintln(etoString());

}

catch (IOException e)

{

Systemoutprintln(etoString());

}

}

}

java UDP连接,如果要发送文件的话,你只能自己定义一系列的协议

因为TCP UDP 双方发送都是二进制数据

那么这个实现非常复杂

得不停的发送数据,写数据,建议使用>

这是java网络编程里的UDPServer 和UDPClient 之间简单通信程序啊,等等我看看你的程序再说

你想要的是不是这种效果?

import javanet;

class UdpSend{

  public static void main(String[] args)throws Exception{

      //1创建udp服务,通过DatagramSocket对象

      DatagramSocket ds = new DatagramSocket(8888);//---这儿的端口号不要和UdpRece的一样

      //2确定数据,并封装成数据包。

      //DatagramPacket(byte[] buf, int length, InetAddress address,

int port)

          //构造数据报包,用来将长度为 length 的包发送到指定主机上的

指定端口号。

      byte[] buf = "udp shu ju lai le"getBytes();

      DatagramPacket dp =

          new DatagramPacket(buf,buflength,InetAddressgetByName

("16925420014"),10000);//----这儿的端口号保持与UdpRece一样

      //3通过Socket服务,将已有的数据包发送出去。通过send方法。

      dssend(dp);

      //4关闭资源

      dsclose();

  }

}

最后想说,先运行UdpRece 再运行UdpSend,反过来UdpSend要运行2遍

线程是计算机任务执行的最小单位,多线程也就是说一台计算机同时可以干好几件事,例如同时打字和听音乐,而单线程就是打字时只能打字,其他的干不了。

udp和tcp是两种协议,网络协议是分层的,他们都是传输层协议。所以协议就是一组约定的规则,没有规矩不成方圆嘛。

以上就是关于JAVA用udp从本地网络穿透到公网之后,从其他网络作为客户端发送udp包到服务器正常接收。全部的内容,包括:JAVA用udp从本地网络穿透到公网之后,从其他网络作为客户端发送udp包到服务器正常接收。、关于java写的TCP,UDP、关于java中UDP的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10638979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存