我试图实现TFTP客户端/服务器。根据RFC 1350我得到的一切正确,现在唯一缺少的是确认接收它的人收到的每个数据包是客户端还是服务器。
如果客户端在20秒内没有发送ACK,则服务器会再次传输相同的数据包,直到它从客户端收到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();
我正在学习网络编程,所以感谢任何建议或代码示例。
答案 0 :(得分:1)
问题解决了:
答案 1 :(得分:0)
将所需数据构建到DatagramPacket
。由于这是回复,因此最好重复使用传入的DatagramPacket
。这样它就已经有了目标地址。
发送。