Visual c++ 小包及;垃圾

Visual c++ 小包及;垃圾,visual-c++,Visual C++,我试图将消息从客户端发送到服务器,但我遇到了一个问题,即消息的长度不是固定的,因此我尝试将字节/字符的总数放在消息之前。但问题没有解决。我开始在服务器端接收垃圾,就像客户端不断发送相同的信息,但垃圾更多 在我尝试向以前的代码中添加一些东西之前,一切都很顺利,但是有很多运行时错误和bug。所以我采用了这种方法,这似乎是最好的 还有两件事, 1-似乎缓冲区没有像继续添加一样清空,即使它能够在调试代码时读取我能看到的第一条消息。 2-如何清空从缓冲区读取的部分,在我的情况下,缓冲区是mybuffer

我试图将消息从客户端发送到服务器,但我遇到了一个问题,即消息的长度不是固定的,因此我尝试将字节/字符的总数放在消息之前。但问题没有解决。我开始在服务器端接收垃圾,就像客户端不断发送相同的信息,但垃圾更多

在我尝试向以前的代码中添加一些东西之前,一切都很顺利,但是有很多运行时错误和bug。所以我采用了这种方法,这似乎是最好的

还有两件事, 1-似乎缓冲区没有像继续添加一样清空,即使它能够在调试代码时读取我能看到的第一条消息。 2-如何清空从缓冲区读取的部分,在我的情况下,缓冲区是mybuffer

视窗7 Visual C++ 2010表示< /P> 服务器代码:

 char * GetMessage(int x, char arry [])
 {
char * msg = NULL;
msg = new char[x];
ZeroMemory(msg,x);

for(int i = 1; i <= x; i++)
{
    msg[i-1] = arry[i];
}

return msg;
  }

 void main(){

  char Filename[20];
            char Direction[4];
            char Type[1];
            bool FileExistOnClient;
            fstream fFile;
            FILE * iiFile;
            int strlength;
            char Hostname[20];
            int count = 0 ;
            char * ptr;


            ibytesrecv=0; 
            ZeroMemory(mybuffer,strlen(mybuffer));
            if((ibytesrecv = recv(s1,mybuffer,100,0)) == SOCKET_ERROR)
                throw "Receive failed\n";
            ptr = &mybuffer[0];
            count = atoi(ptr);
            sprintf(Hostname , GetMessage(count,mybuffer));
            cout <<mybuffer <<"\n";
            cout <<"Hostname is:" << Hostname << endl;
  }

很多问题。使用strcat()是错误的,mybuffer不是正确的以零结尾的C字符串。接收代码与传输的长度没有任何关系,需要一个循环来确保所有字节都被接收。mybuffer长度为120,我将send buff长度更改为20,但是,我尝试发送的所有内容都不会超过30字节。我在客户端有3个send,在服务器上有3个recv。所以我认为它应该起作用。关于strcat,您建议使用什么来代替它?您必须使用memcpy()。rcve()返回的字节数完全不可预测。我不确定您是否注意到我正在使用strcat以便可以在前面插入消息的长度,但现在我无法这样做,因为它正在替换所有内容。还有一个问题,我需要调用//ZeroMemory(szbuffer,strlen(mybuffer));每次发送/接收前
    mybuffer[0] = strlen(localhost)+48;
    strcat(mybuffer,localhost);
    ibytessent=0;    
    ibufferlen = strlen(mybuffer)  ;
    ibytessent = send(s,mybuffer,ibufferlen,0);
    if (ibytessent == SOCKET_ERROR)
        throw "Send failed\n";  


    //Send File name
    //ZeroMemory(mybuffer,strlen(mybuffer));
    mybuffer[strlen(mybuffer) ] = strlen(Filename)+48;
    strcat(mybuffer,Filename);
    ibytessent=0;    
    ibufferlen = strlen(mybuffer);
    ibytessent = send(s,mybuffer,ibufferlen,0);
    if (ibytessent == SOCKET_ERROR)
        throw "Send failed\n";  
 }