import java.io.*;
import java.net.*;class UDPClient { public static void main(String args[]) throws Exception { DatagramSocket clientSocket = new DatagramSocket();

String serverHostname = new String("127.0.0.1"); InetAddress IPAddress = InetAddress.getByName(serverHostname);

BufferedReader inFromUser = new BufferedReader(new InputStreamReader(
System.in));
String sentence;
int a ;
byte[] receiveData = new byte[5120];

while((sentence = inFromUser.readLine())!=null) {


byte[] sendData = new byte[5120];

sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData,
sendData.length, IPAddress, 20001);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);
clientSocket.setSoTimeout(3000);
?????????????????????????????????????

clientSocket.receive(receivePacket);

String modifiedSentence = new String(receivePacket.getData()); InetAddress returnIPAddress = receivePacket.getAddress();
System.out.println("From: " + returnIPAddress);
System.out.println("Message: " + modifiedSentence);


clientSocket.close();
}
}
import java.io.*;
import java.net.*;class UDPServer {

public static void main(String args[]) throws Exception {

// Create a Server Datagram Socket binded to Port 20001 
DatagramSocket serverSocket = new DatagramSocket(20001); // The Datagram is 5K 
byte[] receiveData = new byte[5120];
byte[] sendData = new byte[5120]; // Counter
int i = 1;

while (true) {

// Receive a Packet if i = odd number
if (i % 2 != 0) {

receiveData = new byte[5120];
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);


serverSocket.receive(receivePacket);
i++;


String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
System.out.println("From: " + IPAddress + ":" + port);
System.out.println("Message: " + sentence);
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData,
sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}
}
}
当server收到消息 会发个ACK给client 如果client 过了3秒钟没收到 重发之前的消息 我在server里准备每第2个收不到 来test 谁会帮帮写下client没收到 重发消息吗 在serverclass里面 谢谢 急!!!!小弟新手 麻烦写相信点

解决方案 »

  1.   

    你可以考虑启动client一个主线程,一个专门处理发送的线程(生产者),一个专门处理接受的线程(消费者)。占资源的问题,你自己去处理。
    这个应该到处都有类似的程序,比如THINK IN JAVA里面就有源代码的。另外UDP是无序的, 所以你需要制定包格式,来识别是哪个消息,是第几次送的等等。
      

  2.   

    有人能帮我谢谢看 resend那一段吗 小弟新手 试了很久还是不行 每次都是3秒 就timeout了
      

  3.   

    没有找到上传附件的地方,
    就把源代码放到了地址:http://download.csdn.net/source/1184505