java里面DatagramSocket的setReceiveBufferSize方法为什么没有效果?

angelhoto 2013-11-28 07:21:26
文档说这是一个提示,提示底层接收缓冲区为指定的大小,udp的话,如果包大小超过了缓冲区大小会被丢弃,为什么测试一下没有效果,客户端发送缓冲区设置2048,发送一个1088字节的数据包,结果没有被丢弃

private int port=8888;
private DatagramSocket socket;

public EchoServer() throws IOException {
socket=new DatagramSocket(port); //与本地的一个固定端口绑定
socket.setReceiveBufferSize(512);
System.out.println(socket.getReceiveBufferSize());//修改成功512
System.out.println("服务器启动");
}

public String echo(String msg) {
return "echo:" + msg;
}

public void service() {
while (true) {
try {
DatagramPacket packet=new DatagramPacket(new byte[2048],2048);
socket.receive(packet); //接收来自任意一个EchoClient的数据报
String msg=new String(packet.getData(),0,packet.getLength());
System.out.println(packet.getAddress() + ":" +packet.getPort()
+">"+msg);

packet.setData(echo(msg).getBytes());
socket.send(packet); //给EchoClient回复一个数据报
}catch (IOException e) {
e.printStackTrace();
}
}
}

public static void main(String args[])throws IOException {
new EchoServer().service();
}
...全文
774 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2013-11-29
  • 打赏
  • 举报
回复
文档没说设小点就一定会丢弃吧。。。最多只能说增加了被丢弃的可能性。 这个参数主要防止你要接收大数据包 或者 在大量并发的时候为程序赢得周转时间。
angelhoto 2013-11-28
  • 打赏
  • 举报
回复
接收缓冲区只设置了512字节啊,没有超过,如果不设置默认的比这个大,我故意设小一点看到底会不会丢弃
  • 打赏
  • 举报
回复
超过

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧