服务端是用C++写的。开放的一个端口。要用java连上去发送一个字符串过去。能连上去但是数所是空的, Socket soc=new Socket("192.168.1.100",8023);
 char[] send="Refresh 97\\r\\n".getArrayChar;
 
//  BufferedWriter out=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream())); //BufferedOutputStream buff=(BufferedOutputStream)soc.getOutputStream();
out.write(send,0,send.length);
out.flush();
out.close();
soc.close();
不知道这样写有什么错误.指点一二啊!!!!

解决方案 »

  1.   

    感觉还得用字符串,发送字节有高低位的问题
    会不会是其他地方的问题呢,先随便用java搞一个服务器端测试呢?
      

  2.   

    先测试一下服务器能不能获得数据,要是不能就用java写一个server测试一下
      

  3.   

    对方的服务端是这样的 在dos窗口 telnet 192.168.1.100 8023 而用java连上这台机子发送一个字符串,对方接收的就是一个char[]数组。
    对于套节字的理解,不管服务端用什么写的只要是基于tcp/ip协议并且开放的有端口。用java socket都能连上。这样的理解对吧?但是这样写什么发送的是空,期待有这方面的高手解决
      

  4.   

    如果是  telnet 192.168.1.100 8023 写入字符能否收发成功, 那么问题应出在java的客户端了. 一般通信会用byte, 即使使用char发送, 在socket层同样会转成byte字节的OutputStream os = socket.getOutputStream();
    byte[] b = "haha".getBytes();
    os.write(b, 0, b);
    os.flush();还有一点可能是socket底层有发送缓冲的, 在你的数据还没有完全发送的时候, socket.close可能已经将连接强制关闭了, 因此, 在关闭前最好sleep一下
      

  5.   

    > 能连上去但是数所是空的这句是什么意思?是说服务器端没有响应吗?有个疑问,也算是个提示:为什么是 "\\r\\n" 而不是 "\r\n"?
      

  6.   

    上面说的也有想到。不过没试,在发送过去了之后在服务端还得等一二分钟才能显示信息。一会试试在不关闭的情况接受到是否为空。\\r\\n 是回车,发送过去要带上的,如果在java这端不转义的话\r\n会没有的。
      

  7.   

    刚试了一下。能显示了但是接受的字符不对啊!!send=Refresh97
    fhr9Re7es
    fhr9Re7es
    fhr9Re7es
    fhr9Re7es
    fhr9Re7es显示的不正确啊,,java端就加了一个while(true){
     out.write(send);
    }为什么会是这样的啊!!
      

  8.   

    看样子有可能服务器也有问题, 建议你用java自己照着例程自己写一对通行程序, 再去试复杂的