今天做socket通信,突然出了一个怪异的问题。之前都是一样的语句却都没有出现过这样的问题服务器端 语句
char buffer[1000];
buffer=fun();
//buffer 调用函数后的结果是 “350 \r\n\0”
send(socketa,buffer,1000,0)客户端 语句:
char buffer1[4000];
recv(socketb,buffer1,4000,0);调试的时候发现,客户端接受的字符串 “350 \r\n\0”却出现在了buffer1的第900个元素位置。也就是buffer[900]='3'.....
但是之前都是这么写的,接收到的字符串都是在接收数组的最前面啊?这样的问题应该怎么解决啊?非常奇怪!

解决方案 »

  1.   

    可以char buffer1[4000]; 
    先memset等把buffer1清零
      

  2.   

    up
    c端和s端的缓冲区在每次接收时都清0。
      

  3.   


    服务器端 语句 
    char buffer[1000]; 
    buffer=fun(); 
    //buffer 调用函数后的结果是 “350 \r\n\0” 
    send(socketa,buffer,1000,0) ”buffer最前面是什么内容?“350 \r\n” 是buffer最前面的还是最后面的内容?你确定要把buffer中的内容全部发出去吗(发1000字节)?
    客户端代码那里按理说不清也应该没事才对。
      

  4.   

    buffer 就只有这一些内容啊
      

  5.   

    char buffer[1000]; 
    buffer=fun();
    这写法错误,是简化了的代码么应该是fun(buffer)的形式吧
      

  6.   

    先清一下内存好些吧 memset
      

  7.   

    大侠们,用了memset之后还是不行啊我发现了问题的规律,s端发过去了1000字节的串,而客户端却接受了1900字节的串。如果发送2000字节的数据,则接受2900字节的串,也就是说到第900个元素开始才是我想真正从s端发送过来的数据。前900个字节的数据不知道是怎么一起传过来的???有什么情况是s端发送同时会夹杂着别的信息穿过来呢?求助啊
    UP
      

  8.   

    s端是你自己写的吗?如果是你写的,自己跟踪。如果要比较方便的跟踪方式,使用抓包工具,看看你发送的字符到底是什么。接收的字符到底是什么。开发socket程序,要用到抓包工具的,可以推荐你:Packetyzer,免费, WireShark,收费情况不清楚。
      

  9.   

    那就看下,发送端每次发送的时候的buffer到底是什么?
      

  10.   

    1. 
    //buffer 调用函数后的结果是 “350 \r\n\0” 
    那为啥还要发送1000个?2. 服务器端是否在其它地方有发送其它的数据?3. 在客户端,是否有处理接收一半数据的情况?
      

  11.   

    呵呵,你在发送端是UNICODE方式还是ANSI方式,我建议在发送的过程中都转为UNICODE方式,接受端自己在做处理
      

  12.   

    buffer=fun(); 
    ================
    这句啥意思?