论坛首页 入门技术论坛

Graceful Java Programming 优雅Java编程 之Socket Client

浏览 24463 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-02-17  
难道不是么?

开始一堆的socket参数设置,其实不同的应用场景有不同的设置,这个跟优雅无关。

使用char读数据,charset也完全是跟c服务器要一致,如果优雅,应该使用一个通用的解决方案。其实这个问题还有c以0结尾的问题,都属于通讯协议的设计问题。似乎跟优雅也无关吧。

把这些东西扒掉,就剩下建立连接,最简单的读写数据,然后关闭连接。这不是hello world,还是啥?



0 请登录后投票
   发表时间:2009-02-17  
成抬杠贴了
0 请登录后投票
   发表时间:2009-02-17  
luanma 写道
难道不是么?

开始一堆的socket参数设置,其实不同的应用场景有不同的设置,这个跟优雅无关。

使用char读数据,charset也完全是跟c服务器要一致,如果优雅,应该使用一个通用的解决方案。其实这个问题还有c以0结尾的问题,都属于通讯协议的设计问题。似乎跟优雅也无关吧。

把这些东西扒掉,就剩下建立连接,最简单的读写数据,然后关闭连接。这不是hello world,还是啥?





原来是这样啊,看来兄弟的要求很高,无话可说了。

java原来就是以简单为优雅的,程序结构清晰,逻辑越简单约好。
我发贴要说的都在贴的最后说了,这个贴本来就不是给高手准备的,怠慢了,呵呵!
0 请登录后投票
   发表时间:2009-02-17  
socket的tcp协议,是按照流来抽象的。所谓流,就是与发送的时间和次数无关的,只和发送字节序无关。
比如发送"ABC",是一次发出"ABC",还是分三次发出"A","B","C",即使这A,B,C都处在三个报文中,对于接收端来讲都是没有区别的。
如果分三次发出,对于接收端的read函数会怎么样?它一般会在读到A的时候,返回1次,读到B的时候,返回1次,读到C的时候返回1次。每次返回长度都是1个字节。所以,对这种情况,就应该读到所有的字节,才返回。
这些都是一些处理socket的基本常识。跟代码是否优雅无关。
楼主的代码,似乎竭力想把一个完整的报文一次发出,这个概念就是错误的。就算1个字节1个字节的发,服务端的程序也应该能处理,否则服务端的程序就是错误的。因为在网络不正常的时候,可能会采用较小的报文。比如,当前双方的通讯速度是5个字节/秒,那tcp协议栈就不会一下子发出一个1000字节的报文。
0 请登录后投票
   发表时间:2009-02-17  
wandou 写道
socket的tcp协议,是按照流来抽象的。所谓流,就是与发送的时间和次数无关的,只和发送字节序无关。
比如发送"ABC",是一次发出"ABC",还是分三次发出"A","B","C",即使这A,B,C都处在三个报文中,对于接收端来讲都是没有区别的。
如果分三次发出,对于接收端的read函数会怎么样?它一般会在读到A的时候,返回1次,读到B的时候,返回1次,读到C的时候返回1次。每次返回长度都是1个字节。所以,对这种情况,就应该读到所有的字节,才返回。
这些都是一些处理socket的基本常识。跟代码是否优雅无关。
楼主的代码,似乎竭力想把一个完整的报文一次发出,这个概念就是错误的。就算1个字节1个字节的发,服务端的程序也应该能处理,否则服务端的程序就是错误的。因为在网络不正常的时候,可能会采用较小的报文。比如,当前双方的通讯速度是5个字节/秒,那tcp协议栈就不会一下子发出一个1000字节的报文。


谢谢,第一次有人这么清晰理论的解释了“流”,受教了!一段非常简单的程序,能得到大家的关注,让某人我收益良多!

至于“优雅”更多是出于我对java的喜爱,我的有一系列的blog都用“优雅java编程”来起头的,哈哈,大家就不用在这上面较真了。
0 请登录后投票
   发表时间:2009-02-18  
没天理啊,好心找雷劈,写个帖子还被评新手贴,倒扣10分。无语
0 请登录后投票
   发表时间:2009-09-15  
  char lastChar = 0;
  do {
      size = br.read(charBuf , 0 , 4096);
      lastChar = charBuf[size-1];
      if(lastChar == 0){
          //去除尾部的\0字符
          received.write(charBuf, 0, size - 1);
      }
  }while(lastChar != 0);

也遇到了类似的问题。这样确实可以解决
0 请登录后投票
   发表时间:2010-01-29  
多谢分享,看了这么多的回复,收益颇多。
0 请登录后投票
论坛首页 入门技术版

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