0

ネットワーク アプリケーション プロジェクトに問題があります。

これは私の主要な構造の一部です:

    struct elemento 
    { 
        char username[256]; 
        short int UDPport;
        unsigned long IPaddress;
        int socket; 
        char buffer[256];
        int last; 
        struct elemento *next; //puntatore all'elemento successivo della lista
        struct elemento *enemy; //puntatore alla struttura dell'avversario
    };

typedef struct elemento player; 


player *client = NULL; //punta al client attualmente gestito

recvの戻り値を扱う関数です

int recvTCP(int sd, void* buf, int len)  
{
  int ret;
  ret = recv(sd,buf,len,0);
  if (ret<len)
 {
    if(ret==0)  
    {
        /
        FD_CLR(sd,&master); 
        close(sd); //chiudo la socket
        printf("%s si è disconnesso dal server\n",client->username);
        if(client->impegnato==YES)  
        {
            //notifica(client->enemy->socket);
        }
        if(client->ready==YES)
        {
            numerogiocatori--; 
        }
        elem_remove(client); 
        return -1; 
    }

    return ret; 

}
return 0; 
 }

これはデータのバッファリングを処理する関数です:

int riceviMsg()
{
    int ret;
    ret = recvTCP(client->socket,&(client->buffer[client->last]),client->length);
    if(ret<0) return -1; 
    if(ret==0) 
    {
        client->last=0; 
        return 0; 
    }
    client->last=ret;
    client->length=(client->length)-(client->last);  
    return ret;
}

これは、INT 変数の recv を処理する関数です。

int riceviLength() 
{

  int ret;
  int temp; 
  ret = recvTCP(client->socket,&temp,4-client->last);
  client->length=(client->length)<<(8*(ret)); 
  client->length=(client->length)|temp;  
  if(ret<0) return -1; 
  if (ret==0)  
  {
    client->last=0;
    return 0;
  }
  client->last=client->last-ret;
  return ret;
}

この最後のものは完全に間違っていると思います。私はローカルホストでアプリを試していて、部分的なデータのみを受け取ることはめったにないからだと思います..

そして、riceviMsg() については、次の疑問があります。

「ciao\0」を送信すると、反対側で最初に受信する文字は? "c" または "\0" ?

みんなに感謝します:)

Ps : データの長さを文字列に変換して送信し、riceviMsg() 関数で処理しようと思います。riceviLenght() は完全に間違っているので削除します。しかし、riceviMsg() のバッファが正しく機能するかどうかはわかりません :/

4

0 に答える 0