java socket通信,两个一直没有搞明白的问题,请教socket高手回答

bloodrate 2008-07-25 12:36:40
1、程序在网络环境复杂,距离远的情况下有丢包,数据不能到达的情况,到底程序如何控制才能避免发生这个呢??

2、我开启多线程下载,cpu立刻站满,速度也爆快,我不希望这样啊,我希望能不影响其它操作,而速度也没必要那么快,程序中应如何控制带宽和cpu使用率阿?

这两个实在没思路
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sagezk 2008-07-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 bloodrate 的帖子:]
1、程序在网络环境复杂,距离远的情况下有丢包,数据不能到达的情况,到底程序如何控制才能避免发生这个呢??

2、我开启多线程下载,cpu立刻站满,速度也爆快,我不希望这样啊,我希望能不影响其它操作,而速度也没必要那么快,程序中应如何控制带宽和cpu使用率阿?

这两个实在没思路
[/Quote]

1. Socket 是建立在 TCP/IP 协议上的,TCP 协议(Socket)会自动处理数据包丢失的情况,即当出现数据包丢失时接收方会自动给发送方返回要求重发丢失的数据包的信息。
2. 一般可通过调整同时开启的线程数量粗略地控制带宽和 CPU 的使用率,更精细的控制就要在 I/O 流上作控制了。
jdlsfl 2008-07-25
  • 打赏
  • 举报
回复
1、tcp连接还会丢包的话,那你可以多次重发,或者用阻塞机制
2、多线程下载,你不要在主线程建立连接。每个线程也可以用sleep来交出cpu
bloodrate 2008-07-25
  • 打赏
  • 举报
回复
第二个问题再进一步,比如最简单的通信 客户端 socket.getOutputStream().write()... 服务器 serverSocket.accept().read().... 这是java代码最底层的通讯代码了,那么假如说我的网卡带宽是100MB,线路带宽是256k,那么用这两句传输数据是不是默认用满带宽传输,就是100MB与256KB之间较小的256KB传输,如果想控制在100KB以下怎么做?
Ant 2008-07-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sagezk 的回复:]
1. Socket 是建立在 TCP/IP 协议上的,TCP 协议(Socket)会自动处理数据包丢失的情况,即当出现数据包丢失时接收方会自动给发送方返回要求重发丢失的数据包的信息。
2. 一般可通过调整同时开启的线程数量粗略地控制带宽和 CPU 的使用率,更精细的控制就要在 I/O 流上作控制了。
[/Quote]

同意楼上的,另外如果你觉得CPU被占用太多机器变慢了的话,应该是你的线程开得太多,建议你考虑使用线程池技术

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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