我試圖實現一個TFTP客戶端/服務器。根據RFC 1350,我得到了正確的東西,現在唯一缺少的東西是確認每個接收它的數據包,無論是接收它的客戶端還是服務器。使用std libs實現Java TFTP - 如何確認數據包?
- 服務器發送
- 客戶端收到數據報包併發送回ACK數據報文包(「確認」)在包味精
- 服務器發送下一個數據包
如果客戶端不發送確認20秒後,服務器再次轉發相同的數據包,直到它從客戶端收到ACK。
這是我發送和接收數據包的方法。他們都工作我只需要添加上面,但我沒有絕對不知道如何實現。
服務器:
private void receiveData() throws Exception
{
Calendar cal = Calendar.getInstance();
SimpleDateFormat prefix = new SimpleDateFormat(date_format);
String date = prefix.format(cal.getTime()).toString();
DatagramPacket receiveData = new DatagramPacket(incomingData, incomingData.length);
OutputStream fos = new FileOutputStream(new File(date+data));
while(true)
{
clientSocket.receive(receiveData);
if(receiveData.getLength() == 512)
{
fos.write(receiveData.getData());
} else {
fos.write(receiveData.getData(), receiveData.getOffset(), receiveData.getLength());
break;
}
}
fos.close();
clientSocket.close();
}
客戶:
private void sendData() throws Exception {
DatagramPacket data = new DatagramPacket(outgoingData,
outgoingData.length, clientAddress, clientPort);
InputStream fis = new FileInputStream(responseData);
int a;
while ((a = fis.read(outgoingData, 0, 512)) != -1) {
data.setLength(a);
serverSocket.send(data);
Thread.sleep(5);
}
fis.close();
我剛學習網絡編程,以便將感謝任何建議或代碼示例。
你可以在我的代碼 – 2012-03-20 01:33:11
上顯示一個例子。你需要的API是'DatagramPacket.setData()'和'DatagramSocket.send()'。 – EJP 2012-03-20 01:41:42
我在這裏呆了2天,我什麼也沒得到。無論如何感謝您的幫助。我試圖實現你所說的我重寫我的方法,但沒有得到多遠:http://www.copypastecode.com/187840/ – 2012-03-20 01:59:27