论坛首页 入门技术论坛

Graceful Java Programming 优雅Java编程 之Socket Client

浏览 24464 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-02-08  
我纳闷一个问题:为什么进来一些人打了17个“新手贴”却始终是咱们3个人再说这个事,是:太简单不屑于回答?还是浮躁坏风气?我看答案未见得,这事真那么简单,这问题真那么新手,我看也不见得。
0 请登录后投票
   发表时间:2009-02-08  
受教了,一般我都是用byte[]接收,没用过char[],没有需要size-1啊
我做法是字节流判断关闭socket
1)接收到-1
2)异常抛出
字符流
1)接收到Null
2)异常抛出
0 请登录后投票
   发表时间:2009-02-08  
unsid 写道
我纳闷一个问题:为什么进来一些人打了17个“新手贴”却始终是咱们3个人再说这个事,是:太简单不屑于回答?还是浮躁坏风气?我看答案未见得,这事真那么简单,这问题真那么新手,我看也不见得。


哈哈,楼上的兄弟,不用太气愤。目前中国的IT界浮躁风太甚。很多的所谓公司的高手,是只停留在应用层面,而缺乏专研和创新精神的。大多喜欢看很多开源项目的API,会用很多很多IDE,能搭各种应用服务器,当却很少注重算法,数据结构,也很少认真研究协议的。也许有很多人看了要生气,要不服气的,不过我觉得我说的是事情,相信javaeye上有真正的大牛,会有同样的感受。
0 请登录后投票
   发表时间:2009-02-08  
另长连接的socket一般都会加上心跳包来判断连接

0 请登录后投票
   发表时间:2009-02-09  
精华帖 (0) :: 良好帖 (2) :: 新手帖 (17) :: 隐藏帖 (0)
为什么我打不了?
0 请登录后投票
   发表时间:2009-02-09  
之前和别人讨论一个问题,socket.connect创建了一个网络连接,那么这个连接到底是个什么东西,我指示它以什么形势存在,比如是不是服务器端为客户端保存某个状态位,或者什么其他形势,为什么会有长连接和瞬时连接之分,在socket.close()之前和之后,服务器和客户端各发生了哪些变化
0 请登录后投票
   发表时间:2009-02-09  
这段代码很好。。我来比较比较我写的。
0 请登录后投票
   发表时间:2009-02-09   最后修改:2009-02-09
SoLinger 套接字选项 取值

{0,0} 代表socket调用 close 后会等待发送缓冲区所有数据报送完毕,才会真正close socket ,这个是默认

{1,0} 夭折连接 ,即调用close ,不管发送缓冲区有没有待发送数据,都直接关闭连接,丢弃发送缓冲区的所有数据

{1,非0值n},调用close后,等待n长时间后(具体单位忘了),此时间中仍处理发送缓冲区的数据,数据发送完或者时间到,关闭socket

另外,dennis_zane 老大,诚心向你请教我对IO模型理解哪里有问题呀?

还想对楼主说一句,我们做java的也可以多去了解底层细节呀,虽然大多都是业余时间.



0 请登录后投票
   发表时间:2009-02-09  
bachmozart 写道
SoLinger 套接字选项 取值

{0,0} 代表socket调用 close 后会等待发送缓冲区所有数据报送完毕,才会真正close socket ,这个是默认

{1,0} 夭折连接 ,即调用close ,不管发送缓冲区有没有待发送数据,都直接关闭连接,丢弃发送缓冲区的所有数据

{1,非0值n},调用close后,等待n长时间后(具体单位忘了),此时间中仍处理发送缓冲区的数据,数据发送完或者时间到,关闭socket

另外,dennis_zane 老大,诚心向你请教我对IO模型理解哪里有问题呀?

还想对楼主说一句,我们做java的也可以多去了解底层细节呀,虽然大多都是业余时间.



SoLinger时间单位是秒,而SoTimeOut是毫秒,呵呵,java这么设计估计是历史遗留问题吧,否则应该统一单位的

楼上说的对,还是俺不够勤奋啊,一直没有找到java方面对socket的描述(java网络通讯的书买了不少,但对socket下面的实现谈得少),也就懒得看与C、C++相关的文章了。

0 请登录后投票
   发表时间:2009-02-09   最后修改:2009-02-09
swen00 写道
受教了,一般我都是用byte[]接收,没用过char[],没有需要size-1啊
我做法是字节流判断关闭socket
1)接收到-1
2)异常抛出
字符流
1)接收到Null
2)异常抛出


byte接收时,如果碰到char编码不同,则字节长度就不一样了,UTF8的汉字是3byte,英文字母1byte,不知道有没有记错。
utf-16的统统2byte

使用byte接收数据,我习惯两种情况:
1.通讯包有明确协议,能给出每段报文的字节数的;或者报文头部就带有描述字节数的信息的。
2.信息本身就是2进制的,如音频,图像等
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics