你说的还不清楚。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的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)