日期:2014-05-20  浏览次数:20786 次

求救版主大人
问题是这样的:我要用DatagramSocket来监听154端口接收其他设备发过来的日志并写到数据库,测试的时候接收的数据和数据库里面的数量能一致,但是接收有问题,在本机模拟的时候是这样的

public class SendMessage implements Runnable {
private static SimpleDateFormat sdft = new SimpleDateFormat(
"MMM dd HH:mm:ss yyyy", Locale.ENGLISH);
public static void main(String[] args) {

System.out.println(sdft.format(new Date()));
for (int i = 0; i < 100; i++) {
new Thread(new SendMessage()).start();
}
}

@Override
public void run() {
try {
DatagramSocket socket = new DatagramSocket();
int i = 0;
while (i < 400000) {
String buff = "<189>"+sdft.format(new Date())+" ZJHZ_MS_WLAN_H3CBAS1-01_ST %%10DHCPSD/5/DHCPS_ALLOCATE_IP(l): -DEV_TYPE=SECPATH-PN=210231A0DGB116000046; DHCP server information: Server IP = 10.173.0.2, DHCP client IP = 10.173.12.186, DHCP client hardware address = 94db-c906-9133, DHCP client lease = 3600.";
DatagramPacket packet = new DatagramPacket(buff.getBytes(), buff.getBytes().length,
InetAddress.getByName("127.0.0.1"), 514);
socket.send(packet);
i++;
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (SocketException e) {[code=java]

e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

}
[/code]
100个线程发,每个线程发40W,这里是总共发4000W.
结果发现丢失了1000多万,按照道理在本机上接收到话应该不会丢失的吧?
各位大侠找下原因啊。

------解决方案--------------------
楼主这个完全可以用TCP,把你这台接收日志的当做Server端,其它的设备都是Client端,往这个Server端发送文件.用NIO非阻塞的就可以了