用StringBuffer request = new StringBuffer();

解决方案 »

  1.   

    你直接可以在处理从socket得到的流的时候,好像可以通过编码的方式
    使本来要占2字节的汉字直接转换为只占一个字节的代码,这些编码之间的转换
    关系就是通过String 中的什么getBytes("1","2")的处理,具体的我也没有处理过
    不过这种肯定能实现,我们实现过这样的处理!
      

  2.   


       最好是在按字节都去数据流时用readByte(),有一个结束标志.比如"/n"     public String getMsgCount(DataInputStream datain){
           //取出输入流的消息的长度
           String msglength=null;
           //次"1024"可是随便的定个上限
           byte[] buff=new byte[1024];
           Do{ 
             try{
              buff[i]=datain.readByte();
           }catch(IOException e){
           e.printStackTrace();
           }
           }while(buff[i]<>13)
           //msglength=buff.toString();
           msglength= new String(buff);
           return msglength;
    }
      

  3.   

    napoleonz(愣头青) :这样效率会低把?
    Arias(永恒之道):能不能帮我找一下,谢谢!
      

  4.   

    gzhua99(孤浪) :我试过了,不行
      

  5.   

    你试过用一个文本作为客户端发过来 客户端保存为UTF-8或者是GBK(可以用EditPlus编辑存储选择格式)
    然后你接受这个文件看看
    我也遇到了的有时候是UTF-8 ÷可现在不行我换成GBK就可以了
      

  6.   

    byte buffer[] = new byte[8000];
    int nread = 0;
    int r = 0;
    int readnum=in.read(buffer,0,8000);
      

  7.   

    1、你接收有问题:网络上即使你一次指定收1024,但可能只传过来一部分,其余的会分多次传完:因此你应该循环接收。此时你必须知道本次传输大约有多少字节过来,要不就是一次你传定长的协议,如果某次数据小于定长的,也需要用特殊字符填充(如你程序里的1024个一次)。按这个方法就不可能出现你说的情况了。同时也不要用你的那种方法判断结束。
    2、你也应该在收到全部字节后一次转换为字符串。这样即方便处理也能提高效率(字符串处理很耗时间)。
    3、转换汉字,首先要确认对方传过来的编码方式(java里统一会用utf-8,但如果是不同的编码方式转换为utf-8也是不一样的),假设你对方也是中文windows系统,那一般编码为gb2312(即楼上说的gbk),那你收到后:new String(b,‘gb2312’)。
      

  8.   

    构造一个流的读取器
    InputStreamReader in = new InputStreamReader(socket.getInputStream());然后调用读取器的read方法,它一次读一个字符,不是字节,这样就容易处理汉字了。int charnow=in.read();
      

  9.   

    我要说,现在还在使用原始socket编程的人是笨笨!
    你的问题其实是一个协议问题,首先通讯双方应该有一个协商好的通讯方式(如报文长度,格式,结束方式等),然后是应用的编码方式(譬如汉字文章一般用GB2312或UTF-8方式编码),只有这些都明确以后你才能用socket编程去实现他们。但是,为什么不采用HTTP等成熟的协议来处理呢?
      

  10.   

    建议仔细研究一下HTTP等常用协议,对协议两个字有个清晰的认识,没有协议的网络编程是没有意义的。
      

  11.   

    楼上的,http实际上也是一种socket。
    不知道楼上的编写过有关编码转换的程序否。
    这个问题在需要编码转换的地方很普遍。
      

  12.   

    socket是TCP协议的一种最常用的接口(另一个是TLI),现在的高层机制(RMI,JDBC,CORBA,COM+等)在处理网络通信时哪个不需要用到socket呢,那你就说他们都是socket吗?soap还在HTTP之上呢,那也算是socket吧,呵呵。精确理解socket编程是很有意义的,如果不做比较底层的工作,是不需要用socket编程的,太原始了。
      

  13.   

    至于具体怎么做嘛,就拿现在最热门的BT下载来说,你看看他的协议规范啦:
    http://bitconjurer.org/BitTorrent/protocol.html
    很简洁,实现起来很方便,有兴趣可以自己做一个BT客户端程序啊。
    顺便还可以学一下:
    sha校验;
    文件分片处理;
    多线程编程;
    多点socket传输;
    网络拓扑侦测;
    分布式发布原理;
    有兴趣还可以研究一下python;
    呵呵,当然这些都不是BT协议规定的东东。
      

  14.   

    qqbz(qqbz) 说的不错,
    楼主主要是对网络编程只有简单的了解,应该看一下一些应用协议的东西(如HTTP)。
    SOCKET只是提供物理层的东西,程序要用得上还需要自己定义应用层的协议。
    只有清楚自己所使用的协议才能真正编程的-因为如果你连一个完整的协议包是如何判断都不知道的话,就更不要说如何做内容的解析了。
      

  15.   

    你不要每次取1024个字节就转为String,而是把字节先存放在ByteArrayOutputStream里,取完以后再统一转为String,如果接发双方都是中文WINDOWS环境,就不会有需要换编码类型的事。