这是我忘服务器端发送数据的代码块
string str5 = "abc";
byte[] message = Encoding.UTF8.GetBytes(str5);
client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(SendData),client);现在的问题是,我比如有10个字段,有string,int等类型,如果一次性发到服务器端该怎么办?
服务器端接受的方式是:比如第一到第十个字符是我发送到第一个字段,从第十一到第二十个字符是我发送到第二个字段。以此类推。是可以组成byte[]数组的方式一起发送吗?如果能,怎么发送呢?如果用XML的方式我倒是知道,可服务器端并不是解析XML的方式来接受的。请教一下高手

解决方案 »

  1.   

    你可以用一个特殊字符来做分割符啊,比如:|
    你最后传的字符串就是:str1|str2|str3.......
    服务器段接受后,转换成string 类型,在用 "|"分割就行了啊
      

  2.   

    服务器端要什么你就发什么,client.send就行了
      

  3.   

    socket收发的都可以说是字节流。
    字节流也得有一定的格式啊,比如你说的那个“第一到第十个字符是我发送到第一个字段,从第十一到第二十个字符是我发送到第二个字段”,如果就这么简单的话,那你就这么填充然后send就行了
      

  4.   

    "那你就这么填充然后send就行了",请问一下怎么填充啊?
      

  5.   

    根据你的文档可以这样。byte[] b=new byte[10] 
    b[0] = 
    b[1] =
    b[2] =
    ...  
      

  6.   

    LZ是不是想这样?
    string str1="abc";
    srting str2="123";
    然后要把这2个字段一次性发过去?
    还有没有复杂类型吧?
    先确定下再帮你解决问题..
      

  7.   

    呵呵,都这么长时间了。还有人回帖,很感谢!那个项目由于服务器那边一直没有弄好。所以到现在也不能测试。还一直就这么扔着呢。
    ----------------
    hopewoo 
    花开花落,花落花开嗯,就是你所说的意思。还有INT.CHAR.DOUBLE这三个类型。但不能把这些字段拼成一个string发过去
      

  8.   

    如果是这样的话,那就很麻烦了.象string这种不定长的数据很难传输,除非 命令都是定死的++
    我可以给你举个例子,多种数据转换成一个byte数组.
    比如我要传1个int 1个double,1个byte,一个字符"CMD",
    一般的,int 是4个字节, double是8个字节,byte当然是一个字节了(废话?),"CMD"的话是3个字节.
    这样要传输的数据一共是4+8+1+3=16个字节.
    然后这么来byte[] data=new byte[16];
    byte[] b_int=BitConverter.GetBytes(int);
    byte[] b_double=BitConverter.GetBytes(double);
    byte[] b_string=Encoding.Default.GetBytes("CMD");
    int index;
    index=0;
    Array.Copy(b_int,0,data,0,b_int.Length);
    index+=b_int.Length;
    Array.Copy(b_double,0,data,index,b_double.Length);
    index+=b_double.Length;
    Array.Copy(byte,0,data,index,1);
    index++;
    Array.Copy(b_string,0,data,index,b_string.Length);到这个时候,data里面前1-4个取出来就表示int字段,5-12表示double字段,13个表示一个byte字段,14-16表示"CMD"字段.
      

  9.   

    做这种c/s如果2边不协调好的话很麻烦的.特别是做sockt通信.一大堆cmd,记错一个就要找半天了.