資源簡(jiǎn)介
設(shè)計(jì)要求:
1)按照UDP協(xié)議數(shù)據(jù)包發(fā)送方式實(shí)現(xiàn)用戶端之間的通信。
2)統(tǒng)計(jì)包的發(fā)送和接收數(shù),計(jì)算數(shù)據(jù)包的丟失數(shù)。
3)設(shè)計(jì)美觀易用的圖形界面。

代碼片段和文件信息
package?com.ydq.udp;
import?java.io.IOException;
import?java.io.RandomAccessFile;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.SocketTimeoutException;
import?com.ydq.util.UDPUtils;
public?class?UDPClient?{
private?String?SEND_FILE_PATH?=?“F:/1.avi“;
private?String?ipString;
private?int?port;
int?sendCount?=?0;
int?lostCount?=?0;
public?UDPClient(String?ipString?int?port)?{
this.ipString?=?ipString;
this.port?=?port;
}
public?void?send()?{
byte[]?buf?=?new?byte[UDPUtils.BUFFER_SIZE];
byte[]?receiveBuf?=?new?byte[1024];
RandomAccessFile?accessFile?=?null;
DatagramPacket?dpk?=?null;
DatagramSocket?dsk?=?null;
int?readSize?=?-1;
try?{
//?讀取文件
accessFile?=?new?RandomAccessFile(SEND_FILE_PATH?“r“);
//?定義DatagramPacket設(shè)定發(fā)送的目的IP及端口
dpk?=?new?DatagramPacket(buf?buf.length
InetAddress.getByName(ipString)?port);
//?定義DatagramSocket
dsk?=?new?DatagramSocket(UDPUtils.PORT
InetAddress.getByName(“l(fā)ocalhost“));
//?設(shè)置超時(shí)
dsk.setSoTimeout(10000);
//?開(kāi)始傳輸文件
while?((readSize?=?accessFile.read(buf?0?buf.length))?!=?-1)?{
//?將讀入緩沖區(qū)的數(shù)據(jù)設(shè)置到dpk中
dpk.setData(buf?0?readSize);
//?發(fā)送數(shù)據(jù)包
dsk.send(dpk);
//?記錄發(fā)送數(shù)據(jù)包個(gè)數(shù)
sendCount++;
//?等待接收端返回的確認(rèn)信息
while?(true)?{
//?設(shè)置接收返回?cái)?shù)據(jù)的緩沖區(qū)為receiveBuf
dpk.setData(receiveBuf?0?receiveBuf.length);
try?{
dsk.receive(dpk);
//?確認(rèn)接收端返回的確認(rèn)信息
if?(!UDPUtils.isEqualsByteArray(UDPUtils.successData
receiveBuf?dpk.getLength()))?{
//?如果不是確認(rèn)成功的信息則重發(fā)數(shù)據(jù)包
System.out.println(“非確認(rèn)接收成功信號(hào),正在重發(fā)數(shù)據(jù)包...“);
dpk.setData(buf?0?readSize);
dsk.send(dpk);
sendCount++;
lostCount++;
}?else?{
//?確認(rèn)接收成功,清空緩沖區(qū)
receiveBuf?=?new?byte[1024];
break;
}
}?catch?(SocketTimeoutException?e)?{
//?接收超時(shí)則重發(fā)數(shù)據(jù)包
System.out.println(“等待超時(shí),正在重發(fā)數(shù)據(jù)包...“);
dpk.setData(buf?0?readSize);
dsk.send(dpk);
sendCount++;
lostCount++;
}
}
}
//?所有數(shù)據(jù)發(fā)送成功后向接收端發(fā)出信號(hào)
System.out.println(“client?send?exit?message?....“);
dpk.setData(UDPUtils.exitData?0?UDPUtils.exitData.length);
dsk.send(dpk);
dpk.setData(receiveBuf?0?receiveBuf.length);
int?count?=?0;
while?(count?5)?{
try?{
dsk.receive(dpk);
//?若沒(méi)收到接收端的確認(rèn)信息則重發(fā)信號(hào)
if?(!UDPUtils.isEqualsByteArray(UDPUtils.exitData
receiveBuf?dpk.getLength()))?{
System.out.println(“client?Resend?exit?message?....“);
dsk.send(dpk);
count++;
}?else?{
//?確認(rèn)接收成功,清空緩沖區(qū)
receiveBuf?=?new?byte[1024];
break;
}
}?catch?(SocketTimeoutException?e)?{
//?如果接收超時(shí)則重發(fā)信號(hào)
System.out.println(“client?Resend?exit?message?....“);
dsk.send(dpk);
count++;
}
}
}?catch?(Exception?e)?{
e.printStackTrace();
}?finall
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件????????301??2015-04-30?15:23??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\.classpath
?????文件????????380??2015-04-30?15:23??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\.project
?????文件????????598??2015-04-30?15:23??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\.settings\org.eclipse.jdt.core.prefs
?????文件???????3487??2015-06-04?16:11??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq\udp\UDPClient.class
?????文件???????2624??2015-06-04?16:26??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq\udp\UDPServer.class
?????文件???????1480??2015-05-29?09:42??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq\util\UDPUtils.class
?????文件???????1633??2015-06-03?11:59??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq\view\Mainfr
?????文件???????2402??2015-06-03?11:59??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq\view\Mainfr
?????文件???????3895??2015-06-04?16:11??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com\ydq\udp\UDPClient.java
?????文件???????2372??2015-06-04?16:26??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com\ydq\udp\UDPServer.java
?????文件???????1727??2015-05-29?09:42??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com\ydq\util\UDPUtils.java
?????文件???????2169??2015-06-03?11:59??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com\ydq\view\Mainfr
?????文件??????65513??2016-01-01?15:52??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\UDP收發(fā)數(shù)據(jù)包.docx
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq\udp
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq\util
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq\view
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com\ydq\udp
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com\ydq\util
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com\ydq\view
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com\ydq
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com\ydq
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin\com
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src\com
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\.settings
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\bin
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp\src
?????目錄??????????0??2015-06-04?18:24??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序\udp
?????目錄??????????0??2016-01-01?15:53??基于UDP協(xié)議的數(shù)據(jù)包收發(fā)程序
-----------?---------??----------?-----??----
????????????????88581????????????????????28
............此處省略1個(gè)文件信息
評(píng)論
共有 條評(píng)論