我试图实现一个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