我在编写网络服务器程序时,发现在我的recv() 中
传过来的串中有'\0'字符,但其后还有字符,
但我将其赋给char *时,'\0'后的字符就丢失了,
1。请问接受字符串中有'\0' 怎么处理?
2。有关套接字的接受是数组的定义,一般是定义成什么类型啊?谢谢!

解决方案 »

  1.   

    1.可以用Replace将'\0'替换成''。
    2。我想一般都是用指针类型吧。
      

  2.   

    替换也不好,将类型换成byte,外加一个长度参数。
    我也在问COM中传入'\0'的问题。http://expert.csdn.net/Expert/topic/2921/2921563.xml?temp=.5057947
      

  3.   

    套接字发送接收的都是数据流发送方需要将一个数据结构转换成数据流,接收方则需要将这个流恢复成数据结构。发送字符串一般是这样做的
    int len = strlen (psz);
    send (sock, &len, sizeof (len), 0); // 先发送字符串长度
    send (sock, psz, len, 0);接收字符串则这样做
    int len;
    char buf [0x1000];
    recv (sock, &len, sizeof (int), 0); // 获得对方发送的字符串长度
    recv (sock, buf, len, 0);  // 接收字符串的内容
    memcpy (psz, buf, len);    // 将字符串内容拷由至自己的数据结构中
    psz [len] = 0;             // 发送的字符串不带 \0这样的话,发送多少字符串都没事
      

  4.   

    继续接收!只要不printf %s就不会被截断!传输不会被丢掉的.
      

  5.   

    要是服务器是人家的,比如POP,SMTP,信件里面有"\0"怎么办?
      

  6.   

    其实利用\0可以做很多事情,比如你进行分段,你就可以在一个段完成后加\0,读取的时候根据收到的流长度来读数据:
      比如:char *szData = buffer;
      那么就肯定得到的是第一个段
      要得到第二个段就是szData = buffer[段长]
       这样可以解决很多问题。
       但我要借问一个问题:
       如果我传送的数据很大,假如有10M、20M。。我一次
       send能行吗?因为socket的缓冲只有8K,这样会失败吗?
      

  7.   

    第一,搞清楚怎么会冒出这个'\0'的?
    第二,如果是正常原因(比如Unicode),那么尝试使用memcpy来得到数据。记住,网络通讯中拷贝数据,最好不要用strcpy,很不安全(容易缓冲区溢出),而且极易出错。