而不是定义为void*??
还有send也是。。
是不是recv函数从socket s的缓冲区里拷贝数据到buf的时候,遇到0就结束拷贝?(c里的字符串是以0结尾)。。我有个问题。。譬如我要发送一个int数组里的数据,要怎样封装数据比较好?
1)可不可以直接把int数组的内容直接用memcpy拷贝到send(SOCKET s, char FAR* buf, int len, int flags)里的buf里?
我这样试了,发现当int 数组里有0时,接受到的数据也就到0就结束了。。
int grid[25];
                                     int len =25*sizeof(int)+1;
char* pdubuff = new char[len+7+2];
strcpy(pdubuff,"RESULT ");
memcpy(pdubuff+7,grid,len);
pdubuff[len+7] = '\r';
pdubuff[len+8] = '\n'; send(client,pdubuff,strlen(pdubuff),0);
2)还是把int数组里的数据全部转换成字符再放到buf?我认为这样好像不好。。
没看过正规的做法。。请大家执教。。

解决方案 »

  1.   

    不是 strlen(pdubuff)是len+9
    send(client,pdubuff,len+9,0);
    但是这样还不对,当数组第一个元素是0时
    接受放受到的是“RESULT ”,若第一个元素非0 倒是能接受怎个数组。。
    //接受方代码
                      char buff[1024];
    memset(buff,0,1024);
    recvbyte = recv(conn,buff,1024,0);
    buff[recvbyte] = '\0';
      

  2.   

    不用转换,你收到的recvbyte是多少?还有
              int len =25*sizeof(int)+1;len不是你数组的长度还有你send和recv的时候调用一次并不能把所有的数据发送出去或收到你要做一个循环,每次调用send和recv的时候判断返回值,如果不是你期望的数据要继续发送
      

  3.   

    25是数组的长度。。
    受到的recvbyte是7
      

  4.   

    send(client,pdubuff,strlen(pdubuff),0)
    关键是第三个参数啊,他才不会遇到0就给你断开呢。所以看一下传strlen(pdubuff)是不对的。