⑴ java写的一个udp的demo用来计算探针传送过来的数据,怎么实现一个接口来调用这个数据
Java UDP通信简单实现
1、Java实现方式
1)server端
/**
*UDPserver端
**/
publicclassUdpServer{
//定义一些常量
privatefinalintMAX_LENGTH=1024;//最大接收字节长度
privatefinalintPORT_NUM=5066;//port号
//用以存放接收数据的字节数组
privatebyte[]receMsgs=newbyte[MAX_LENGTH];
//数据报套接字
;
//用以接收数据报
;
publicUdpServer(){
try{
/*******接收数据流程**/
//创建一个数据报套接字,并将其绑定到指定port上
datagramSocket=newDatagramSocket(PORT_NUM);
//DatagramPacket(bytebuf[],intlength),建立一个字节数组来接收UDP包
datagramPacket=newDatagramPacket(receMsgs,receMsgs.length);
//receive()来等待接收UDP数据报
datagramSocket.receive(datagramPacket);
/******解析数据报****/
StringreceStr=newString(datagramPacket.getData(),0,datagramPacket.getLength());
System.out.println("ServerRece:"+receStr);
System.out.println("ServerPort:"+datagramPacket.getPort());
/*****返回ACK消息数据报*/
//组装数据报
byte[]buf="Ireceivethemessage".getBytes();
DatagramPacketsendPacket=newDatagramPacket(buf,buf.length,datagramPacket.getAddress(),datagramPacket.getPort());
//发送消息
datagramSocket.send(sendPacket);
}catch(SocketExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
//关闭socket
if(datagramSocket!=null){
datagramSocket.close();
}
}
}
}
2)client
/***
*UDPclientClient端
***/
publicclassUdpClient{
privateStringsendStr="SendString";
privateStringnetAddress="127.0.0.1";
privatefinalintPORT_NUM=5066;
;
;
publicUdpClient(){
try{
/***发送数据***/
//初始化datagramSocket,注意与前面Server端实现的差别
datagramSocket=newDatagramSocket();
//使用DatagramPacket(bytebuf[],intlength,InetAddressaddress,intport)函数组装发送UDP数据报
byte[]buf=sendStr.getBytes();
InetAddressaddress=InetAddress.getByName(netAddress);
datagramPacket=newDatagramPacket(buf,buf.length,address,PORT_NUM);
//发送数据
datagramSocket.send(datagramPacket);
/***接收数据***/
byte[]receBuf=newbyte[1024];
DatagramPacketrecePacket=newDatagramPacket(receBuf,receBuf.length);
datagramSocket.receive(recePacket);
StringreceStr=newString(recePacket.getData(),0,recePacket.getLength());
System.out.println("ClientReceAck:"+receStr);
System.out.println(recePacket.getPort());
}catch(SocketExceptione){
e.printStackTrace();
}catch(UnknownHostExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
//关闭socket
if(datagramSocket!=null){
datagramSocket.close();
}
}
}
}
⑵ 一段java UDP传输的问题
我对着你的代拿尘扰困码原封不动写了出来测试一下是没有任何问题的
我觉得是你的测试方法出消李禅错了,应该开两个cmd窗口先运行服务端程序,不要关运行服务端程序的窗口,它会一直阻塞在那里,然后运行发送数据的程序,这时服务端程序就会打印出发送的数据。至于127.0.0.1是不会有错的它是本机回送地址
⑶ pos机和通讯软件之间的报文怎么使用UDP进行传送(使用java)
UDP协议
用户数据报协议UDP(User Datagram Protocol)是无连接传输层协议,提供应用程序之间传送数据报的基本机制。
1.UDP报文的格式
每个UDP报文称为一个用户数据报:它分为两部分:头部和数据区。如图6-14是一个UDP报文的格式,报文头中包含有源端口和目的端口、报文长度以及UDP检验和。
源端口(Source Port)和目的端口(Destination Port)字段包含了16比特的UDP协议端口号,它使得多个应用程序可以多路复用同一个传输层协议 – UDP协议,仅通过不同的端口号来区分不同的应用程序。
长度(Length)字段记录了该UDP数据包的总长度(以字节为单位),包括8字节的UDP头和其后的数据部分。最小值是8(即报文头的长度),最大值为65,535字节。
UDP检验和(Checksum)的内容超出了UDP数据报文本身的范围,实际上,它的值是通过计算UDP数据报及一个伪包头而得到的。但校验和的计算方法与通用的一样,都是累加求和。
不危险,可以打开
⑷ Java UDP 编程,通过Datagram传输list
二个方法,1字节传输,使用对象序列化答轿.ObjectInputStream ObjectOutputStream ,
2.字清让肆符传输,转json传输滑迅
⑸ javaudp一直传输怎么回事
网络卡顿。辩宽禅javaudp一直传输是因为网络卡顿携尘导致的,更换网络重新传输即巧让可解决此问题。该协议是一种用户数据传世协议。
⑹ java 中怎么使用UDP
发送步骤:
使用 DatagramSocket(int port) 建立socket(套间字)服务。
将数据打包到DatagramPacket中去
通过socket服务发送 (send()方法)
关闭资源
importjava.io.IOException;
importjava.net.*;
publicclassSend{
publicstaticvoidmain(String[]args){
DatagramSocketds=null;//建立套间字udpsocket服务
try{
ds=newDatagramSocket(8999);//实例化套间字,指定自己的port
}catch(SocketExceptione){
System.out.println("Cannotopenport!");
System.exit(1);
}
byte[]buf="Hello,Iamsender!".getBytes();//数据
InetAddressdestination=null;
try{
destination=InetAddress.getByName("192.168.1.5");//需要发送的地址
}catch(UnknownHostExceptione){
System.out.println("Cannotopenfindhost!");
System.exit(1);
}
DatagramPacketdp=
newDatagramPacket(buf,buf.length,destination,10000);
//打包到DatagramPacket类型中(DatagramSocket的send()方法接受此类,注意10000是接受地址的端口,不同于自己的端口!)
try{
ds.send(dp);//发送数据
}catch(IOExceptione){
}
ds.close();
}
}
接收步骤:
使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。
定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容
通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中
使用DatagramPacket的方法,提取数据。
关闭资源。
importjava.net.*;
publicclassRec{
publicstaticvoidmain(String[]args)throwsException{
DatagramSocketds=newDatagramSocket(10000);//定义服务,监视端口上面的发送端口,注意不是send本身端口
byte[]buf=newbyte[1024];//接受内容的大小,注意不要溢出
DatagramPacketdp=newDatagramPacket(buf,0,buf.length);//定义一个接收的包
ds.receive(dp);//将接受内容封装到包中
Stringdata=newString(dp.getData(),0,dp.getLength());//利用getData()方法取出内容
System.out.println(data);//打印内容
ds.close();//关闭资源
}
}
⑺ Java UDP文件传输,传输后文件损坏......
UDP是并不是可靠的传输方式,字节序列并没有得到校验,所颂袜局以传输文件时出现错误也是难免的.因为,txt,doc和jpg本身即使出错也不会影响打开,顶多出现个别字符或是个别像素错误不会影响整野让体,而exe则是cpu的指令执行序列你错一个就将会导致程序无法执行,如果好核你懂hash的话可以将文件hash一下看看传输前后的hash码是否相同若不相同说明了传输过程出现了错误需要重传.
UDP一般应用在海量的并对准确性要求不高的传输上,并一般伴随有重传机制
⑻ java中UDP文件传输怎么实现
java UDP连接,如果要发送文件的话,你只能自己定义一系列的协议
因为TCP UDP 双方发送都是二进制数据
那么这个实现非常复杂
得不停的发送数据,写数据,建议使用http协议
⑼ 如何用java实现UDP的可靠传输
我记忆中可靠的传输应该类似TCP的三次握手:
1.发送方向接收方发送一个随机数。
2.接收方收到随机数后将其+1,再回传给发送方。
3.发送方收到随机数判断其是否被+1,如果是代表双方的传递线路是通畅的,可以正式开始传送数据。
⑽ Java语言应用中实现UDP协议编程的方法
//州高乱发送端SocketSendFile.java
import java.io.*;
import java.net.*;
public class SocketSendFile {
public static final int SER_PORT=666;
public static final int CLI_PORT=8484;
public static final String SER_IP="192.168.0.35";
public static int bufSize = 1024;
public static byte] mess = new bytebufSize];
//建立Socket引用
public static DatagramSocket dp;
public static void main(String] args) throws Exception {
dp = new DatagramSocket(SER_PORT);
//调用构造函数SocketSendFile,并传递参数args0](所要传输念冲的文件名)
SocketSendFile(args0]);
}
public static void SocketSendFile(String file2) throws Exception {
//册档定义一个计数器
int pos =0;
//设置写入流
FileInputStream fis = new FileInputStream(file2);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
int i;
do {
i = dis.read();
int j=0;
while (j<1024 & i != -1) {
messpos++] = (byte) i;
i=dis.read();
j++;
}
dp.send(new DatagramPacket(mess,pos,InetAddress.getByName(SER_IP),CLI_PORT));
}
while (i != -1);
fis.close();
}
}
//接收端SocketReceiveFile.java
import java.net.*;
import java.io.*;
public class SocketReceiveFile {
public static int bufSize=1024;
public static byte] mess=new bytebufSize];
public static DatagramSocket dp;
public static final int SER_PORT=8484;
public static void main(String] args) throws Exception {
dp = new DatagramSocket(SER_PORT);
SocketReceiveFile(args0]);
}
public static void SocketReceiveFile(String file1) throws Exception {
FileOutputStream fos = new FileOutputStream(file1);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
int i;
DatagramPacket p = new DatagramPacket(mess,mess.length);
while(true) {
boolean j=false;
while (p.getData().length != 0) {
dos.write(p.getData());
dp.receive(p);
j=true;
}
// System.out.println(new String(p.getData(),0,p.getLength()));
if (j)
System.out.println("文件传送完毕.");
}
// fos.close();
}
}