2011-03-07 4 views
0

J'essaye d'envoyer du texte de la fin du client au serveur. Je souhaite également afficher les horodatages afin de notifier l'heure à laquelle le message a été reçu. Lorsque j'essaie d'envoyer l'heure, elle envoie un blanc. Cependant, le reste de la chaîne est affiché.Client Server - (TCP)

Voici mon code pour l'envoi de la fin du client:

void ClientSock::OnConnect(int nErrorCode) 
{ 
    // TODO: Add your specialized code here and/or call the base class 
    if(nErrorCode) 
    { 
     AfxMessageBox(_T("Connection Failure.")); 
     Close(); 
    } 
    else 
    { 
     time_t clock; 
     time(&clock); 
     char min[30] = {0}; 
     char s = ctime_s(min,sizeof(min),&clock); 
     char text[100] = {0}; 
     char user[10] = {"UserName"}; 
     int n = m_pDlg->GetDlgItemText(ID_REQUEST,text, 100); 
     Send(text,n); 
     Send(user,sizeof(user)); 
     Send(min,sizeof(min)); 
     //m_pDlg->SetDlgItemText(ID_REQUEST,min); 
     AfxMessageBox(_T(min)); 
    } 

} 

et Heres comment imprimer im à la console du serveur:

    SOCKET client; 
      char text[100] = {0}; 
      char user[10] = {0}; 
      char min[30] = {0}; 
      int n,m; 
      //(here the server waits for the client and accepts connection requests) 
      client = accept(server, NULL, NULL); 
      //(receiving text from the client) 

      n = recv(client, text, 99, 0);   
      recv(client, user, 9, 0);  
      m = recv(client, min, 29, 0);  

      if(n > 0 && m > 0) 
      { 
       printf("%s:: %s:%s\n",min,user,text); 
      }    
      else 
       printf("ERROR:Communication Failure.\n"); 

Répondre

1

Une connexion tcp doit être traité comme un flux d'octets. Vous le traitez comme s'il s'agissait d'un flux d'objets avec des informations de type.

Après vos 3 envois, les octets qui ont été transférés seraient par ex.

ABC \ 0UserName \ 0 \ 0Time \ 0 - Un total de 19 octets.

Puis vous lisez 99 octets, et obtenez toutes les données stockées dans "texte", avec rien de gauche dans le flux pour vos prochaines lectures.

Vous devez soit envoyer la longueur du texte avant le texte lui-même, soit lire "données" à la fin de la réception et effectuer une recherche par ex. un 0-terminateur pour extraire les 3 éléments logiques du flux.

+0

Lorsque j'envoie du texte. Il affiche: UserName: text .it n'imprime pas l'heure. – Pavitar

+0

Lisez à nouveau ma réponse, elle vous dit pourquoi. – Erik

+0

Merci beaucoup +1. Après un peu d'expérimentation avec mon code, maintenant je comprends ce que vous avez dit. :) – Pavitar