java中UDP文件传输怎么实现
一、java中UDP文件传输怎么实现?
使用udp协议进行文件传输不能保证正确性,很容易发生丢包的情况。建议在进行较大文件传输的时候使用tcp的socket和serversocket类进行传输。在数据量小于65600字节的时候使用udp是安全的如果一定要使用udp方式进行传输的话,为了提高传输的准确性,可以限制一下传输速度,方法是在发送端每次发送后sleep一下,即在发送端程序的datasocket.send(datapacket);一句后加上:timeunit.microseconds.sleep(1);不过这种方法也不能保证传输绝对准确,所以还是建议用tcp的方式程序本身应该是能够达到效果的,不知道错误提示是什么。测试之前要看下发送端的filepath文件是否存在,貌似防火墙也有影响,测试之间最好关闭防火墙。下面是我的测试程序,接收端是类a1,接收端是类a2,发送端的文件filepath是d盘根目录下的a1.mkv:接收端:import java.io.bufferedoutputstream;import java.io.dataoutputstream;import java.io.fileoutputstream;import java.io.ioexception;import java.net.datagrampacket;import java.net.datagramsocket;public class a1 { public static datagramsocket datasocket; public static final int port=7; public static byte[] receivebyte; public static datagrampacket datapacket; public static void main(string[] args) throws ioexception{ datasocket = new datagramsocket(port); dataoutputstream fileout = new dataoutputstream(new bufferedoutputstream(new bufferedoutputstream(new fileoutputstream(“d:\a.mkv”)))); int i = 0; while (i == 0)// 无数据,则循环 { receivebyte = new byte[1024]; datapacket = new datagrampacket(receivebyte, receivebyte.length); datasocket.receive(datapacket); i = datapacket.getlength(); // 接收数据 if (i > 0) { // 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点 fileout.write(receivebyte,0,i); fileout.flush(); i = 0;// 循环接收 } } }}发送端:import java.io.bufferedinputstream;import java.io.datainputstream;import java.io.fileinputstream;import java.io.ioexception;import java.net.datagrampacket;import java.net.datagramsocket;import java.net.inet4address;import java.util.date;public class a2 { public static datagramsocket datasocket; public static final int port=7; public static byte[] senddatabyte; public static datagrampacket datapacket; public static void main(string[] args) throws ioexception, interruptedexception{ string filepath=“d:\a1.mkv”; datainputstream fis = new datainputstream(new bufferedinputstream(new fileinputstream(filepath))); datasocket = new datagramsocket(port+1); senddatabyte = new byte[1024]; int read=0; long a=new date().gettime(); while(true){ if (fis != null) { read = fis.read(senddatabyte); } if (read == -1) { system.out.println(new date().gettime()-a); break; } datapacket = new datagrampacket(senddatabyte, senddatabyte.length,(inet4address) inet4address.getbyname(“localhost”), port); datasocket.send(datapacket); timeunit.microseconds.sleep(1);//限制传输速度 } }}

二、5 java 如何使用udp协议传送文件
UDP 是一种不可靠的传输连续数据的协议。这意味着传输过程中会有丢包,而且接收到包的次序也是随机的。上面的例子并没有解决文件传输中的这些问题。这意味着以上应用在其每次运行时(所得到的文件)并不是正确的和完整的。以下是关于两个经常发生的问题的原因以及可行解决方案的描述。
如果在文件传输过程中两个包接收顺序错误,而写入文件的顺序是按接收顺序来的。这将造成接收文件损坏。对于这种问题的解决方案是每次传输时定义一个序列号。这可以让 Receiver 按照正确的顺序来存储这些包,不管它们到达的先后次序。
三、POS机提示通讯失败,怎么办?
通讯错误一般就是说你的pos机无法上传下载,也就是没网了。
移动机现在都是无线的,全靠内置sim流量卡来帮忙接网。如果一直出现经没有流量了。
首先、这种情况可公司让公司派员进行处理。
第二、pos机交易原理就是在交易过程中往银行的处理器上发送一条传真请求,然后受到传真确认,交易生效。所以确定自己的pos能正常接入银行处理
第三、由于现在很多电话线和接入上因为技术调整原因,没有分离出来(高频和低频)信号,所以加装分离器就可能解决出现的通讯失败问题。
第四、正常测试pos都需要加拨分机号,既有可能在贵店忘记取消分机号了。
第五、需要额外的帮助请把pos机的logo名称发过来,如果不介意可话支援。
POS(Pointo文意思是”销售点”,全称为销售点情报管理系统,是一种配有条码或OCR码技术终端阅读器,有现金或易货额度出纳功能。
其主要任务是对商品与媒体交易提供数据服务和管理功能,并进行非现金结算。