Клиентский сервер - (TCP) - PullRequest
0 голосов
/ 07 марта 2011

Я пытаюсь отправить некоторый текст с конца клиента на сервер. Я также хочу отобразить отметки времени, чтобы уведомить время, когда сообщение было получено. Когда я пытаюсь отправить время, оно отправляет пробел. Однако отображается остальная часть строки.

Вот мой код для отправки с конца клиента:

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));
    }

}

и вот как я печатаю на консоли сервера:

                  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");

1 Ответ

1 голос
/ 07 марта 2011

TCP-соединение должно рассматриваться как поток байтов. Вы рассматриваете это как поток объектов с информацией о типе.

После 3 отправленных отправленных байтов будет, например,

ABC \ 0UserName \ 0 \ 0Time \ 0 - всего 19 байт.

Затем вы читаете 99 байтов и получаете все данные, хранящиеся в «тексте», и ничего не остается в потоке для следующих чтений.

Вам нужно будет либо отправить длину текста перед самим текстом, либо вам нужно прочитать «данные» на принимающей стороне и отсканировать, например, 0-терминатор для извлечения 3 логических элементов потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...