資源簡介
設計要求:
1)按照UDP協議數據包發送方式實現用戶端之間的通信。
2)統計包的發送和接收數,計算數據包的丟失數。
3)設計美觀易用的圖形界面。

代碼片段和文件信息
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設定發送的目的IP及端口
dpk?=?new?DatagramPacket(buf?buf.length
InetAddress.getByName(ipString)?port);
//?定義DatagramSocket
dsk?=?new?DatagramSocket(UDPUtils.PORT
InetAddress.getByName(“localhost“));
//?設置超時
dsk.setSoTimeout(10000);
//?開始傳輸文件
while?((readSize?=?accessFile.read(buf?0?buf.length))?!=?-1)?{
//?將讀入緩沖區的數據設置到dpk中
dpk.setData(buf?0?readSize);
//?發送數據包
dsk.send(dpk);
//?記錄發送數據包個數
sendCount++;
//?等待接收端返回的確認信息
while?(true)?{
//?設置接收返回數據的緩沖區為receiveBuf
dpk.setData(receiveBuf?0?receiveBuf.length);
try?{
dsk.receive(dpk);
//?確認接收端返回的確認信息
if?(!UDPUtils.isEqualsByteArray(UDPUtils.successData
receiveBuf?dpk.getLength()))?{
//?如果不是確認成功的信息則重發數據包
System.out.println(“非確認接收成功信號,正在重發數據包...“);
dpk.setData(buf?0?readSize);
dsk.send(dpk);
sendCount++;
lostCount++;
}?else?{
//?確認接收成功,清空緩沖區
receiveBuf?=?new?byte[1024];
break;
}
}?catch?(SocketTimeoutException?e)?{
//?接收超時則重發數據包
System.out.println(“等待超時,正在重發數據包...“);
dpk.setData(buf?0?readSize);
dsk.send(dpk);
sendCount++;
lostCount++;
}
}
}
//?所有數據發送成功后向接收端發出信號
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);
//?若沒收到接收端的確認信息則重發信號
if?(!UDPUtils.isEqualsByteArray(UDPUtils.exitData
receiveBuf?dpk.getLength()))?{
System.out.println(“client?Resend?exit?message?....“);
dsk.send(dpk);
count++;
}?else?{
//?確認接收成功,清空緩沖區
receiveBuf?=?new?byte[1024];
break;
}
}?catch?(SocketTimeoutException?e)?{
//?如果接收超時則重發信號
System.out.println(“client?Resend?exit?message?....“);
dsk.send(dpk);
count++;
}
}
}?catch?(Exception?e)?{
e.printStackTrace();
}?finall
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????301??2015-04-30?15:23??基于UDP協議的數據包收發程序\udp\.classpath
?????文件????????380??2015-04-30?15:23??基于UDP協議的數據包收發程序\udp\.project
?????文件????????598??2015-04-30?15:23??基于UDP協議的數據包收發程序\udp\.settings\org.eclipse.jdt.core.prefs
?????文件???????3487??2015-06-04?16:11??基于UDP協議的數據包收發程序\udp\bin\com\ydq\udp\UDPClient.class
?????文件???????2624??2015-06-04?16:26??基于UDP協議的數據包收發程序\udp\bin\com\ydq\udp\UDPServer.class
?????文件???????1480??2015-05-29?09:42??基于UDP協議的數據包收發程序\udp\bin\com\ydq\util\UDPUtils.class
?????文件???????1633??2015-06-03?11:59??基于UDP協議的數據包收發程序\udp\bin\com\ydq\view\Mainfr
?????文件???????2402??2015-06-03?11:59??基于UDP協議的數據包收發程序\udp\bin\com\ydq\view\Mainfr
?????文件???????3895??2015-06-04?16:11??基于UDP協議的數據包收發程序\udp\src\com\ydq\udp\UDPClient.java
?????文件???????2372??2015-06-04?16:26??基于UDP協議的數據包收發程序\udp\src\com\ydq\udp\UDPServer.java
?????文件???????1727??2015-05-29?09:42??基于UDP協議的數據包收發程序\udp\src\com\ydq\util\UDPUtils.java
?????文件???????2169??2015-06-03?11:59??基于UDP協議的數據包收發程序\udp\src\com\ydq\view\Mainfr
?????文件??????65513??2016-01-01?15:52??基于UDP協議的數據包收發程序\UDP收發數據包.docx
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\bin\com\ydq\udp
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\bin\com\ydq\util
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\bin\com\ydq\view
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\src\com\ydq\udp
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\src\com\ydq\util
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\src\com\ydq\view
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\bin\com\ydq
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\src\com\ydq
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\bin\com
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\src\com
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\.settings
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\bin
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp\src
?????目錄??????????0??2015-06-04?18:24??基于UDP協議的數據包收發程序\udp
?????目錄??????????0??2016-01-01?15:53??基于UDP協議的數據包收發程序
-----------?---------??----------?-----??----
????????????????88581????????????????????28
............此處省略1個文件信息
- 上一篇:基于java和mysql的學生信息管理系統
- 下一篇:java秒殺(高并發)視頻教程
評論
共有 條評論