以前写过一个java客户机和C#服务器进行简单通信的小例子,
用的是socket,结果在一方出现了乱码,
不过我想应该不会是socket的原因吧关注一下......

解决方案 »

  1.   

    采用socket,他可以知道是否传递到目的地;
    采用DatagramSocket,只管发送,不保证能够到达目的地
      

  2.   

    需要注意高低位的问题,发送的数字类型的高低位,有可能会发生java和c++的处理正好相反的情况。这不是由发送和接收的次序来产生的问题(次序是不会变的),而是接收到的byte[]高低位在内容中的位置可能会有差异,而产生的。如果发送的数据要求可靠性比较高,有实时性的要求,用tcp的socket
      

  3.   

    package com.webcon.bean;
    import java.io.*;
    import java.net.*;public class SocketBean extends Thread {
      private byte[] body;
      private long bodyLen;
      private short dataType = 0;
      private short pduType;
      private long verifty = 0;
      private short version = 0;
      public SocketBean() {
      }
      public long getBodyLen() {
        return bodyLen;
      }
      public void setBodyLen(long bodyLen) {
        this.bodyLen = bodyLen;
      }
      public short getDataType() {
        return dataType;
      }
      public void setDataType(short dataType) {
        this.dataType = dataType;
      }
      public long getVerifty() {
        return verifty;
      }
      public void setVerifty(long verifty) {
        this.verifty = verifty;
      }
      public short getVersion() {
        return version;
      }
      public void setVersion(short version) {
        this.version = version;
      }
      public short getPduType() {
        return pduType;
      }
      public void setPduType(short pduType) {
        this.pduType = pduType;
      }
      public byte[] getBody() {
        return body;
      }
      public void setBody(byte[] body) {
        this.body = body;
      }
      public void send(){
      InetAddress addr = null;
      try {
        addr = InetAddress.getByName("192.168.1.50");
       Socket s = new Socket(addr, 12222);
      byte[] buff= new byte[512];    DataOutputStream out = new DataOutputStream(s.getOutputStream());
    ////////////////
    不知如何把上述javaBean的各属性打包到byte[] buff里面??????///////////////     out.write(buff);    out.flush();
        try {s.close();}
       catch(Exception e)
       {}  }
      catch (Exception e) { }
      finally{  }  }
      public void recv(){  }
      }
    报头:  
             unsigned  long  bodyLen  4  
             unsigned  shot  dataType  2  
             unsigned  long  verifty  4  
             unsigned  shot  version  2  
             unsigned  shot  pduType  2  
             最后再空两位,总共16位  
     
    报体:N位 请各位大侠指教