Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мусор при получении данных, на winsock сервер приходит не пойми что 
:(
    Опции темы
SoulSeeker
Дата 21.11.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 21.7.2008

Репутация: нет
Всего: 2



Есть сервер. При попытке отослать на него что-нибудь происходят разные вещи, а именно: при подключении виндовским telnet'ом при наборе текст отсылается по одному символу при каждом нажатии, если то же самое сделать через putty, то строка отсылается по нажатии ентер, но вдогонку ей летит еще три сообщения с непонятным мусором. Как быть в такой ситуации?

Код:

Код

#include <iostream>
#include <string.h>
#include <string>
#include <winsock.h>
#pragma hdrstop
#pragma comment(lib, "Ws2_32.lib")

#define SERVER_GREETS   "You were connected to localhost. Welcome."
#define SERVER_BUY        "You were disconnected from localhost. Buy."
#define SERVER_PORT        1234

using namespace std;
 
int main ()
{
    string s;
    int err;
    WSAData WsData;
    if (err=WSAStartup(WsData.wVersion, &WsData)){
        cout << "Error";
        return 0;
    }
    SOCKET ServerSocket=socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in SA;
    SA.sin_family=AF_INET;
    SA.sin_addr.S_un.S_addr=INADDR_ANY;
    SA.sin_port=htons(SERVER_PORT);
    bind(ServerSocket, (sockaddr*)&SA, sizeof(SA));
    listen(ServerSocket, SOMAXCONN);
    SOCKET AcceptSocket;
    cout << "Wating for connection..." << endl;
    while ((AcceptSocket=accept(ServerSocket, 0, 0))!=INVALID_SOCKET){
        cout << "connected...\n";
        send(AcceptSocket, SERVER_GREETS, strlen(SERVER_GREETS), 0);
        char RecvData[32]={' '};
        int recvResult=0;
        do{
            recvResult = recv(AcceptSocket, RecvData, 32, 0);
            cout << "Look! I've got a message: " << RecvData << endl;
        }while (recvResult);
        
        send(AcceptSocket, SERVER_BUY, strlen(SERVER_BUY), 0);
        cout << "Disconnected" << endl;
        cout << "Wating for connection..." << endl;
        closesocket(AcceptSocket);

    }
}


PM MAIL WWW   Вверх
J0ker
Дата 21.11.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 1
Всего: 14



Цитата(SoulSeeker @  21.11.2008,  17:42 Найти цитируемый пост)
Как быть в такой ситуации?

внимательно ознакомиться с работой функции recv
так-же учесть, что телнет - это протокол



--------------------
user posted image
PM MAIL   Вверх
Alca
Дата 24.11.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



Код

cout << "Look! I've got a message: " << std::string(RecvData, 32) << endl;



--------------------
PM WWW ICQ Skype Jabber   Вверх
xVirus
Дата 18.1.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 24.10.2006

Репутация: нет
Всего: нет



Цитата(SoulSeeker @ 21.11.2008,  17:42)
Есть сервер. При попытке отослать на него что-нибудь происходят разные вещи, а именно: при подключении виндовским telnet'ом при наборе текст отсылается по одному символу при каждом нажатии, если то же самое сделать через putty, то строка отсылается по нажатии ентер, но вдогонку ей летит еще три сообщения с непонятным мусором. Как быть в такой ситуации?

Код:

Код

#include <iostream>
#include <string.h>
#include <string>
#include <winsock.h>
#pragma hdrstop
#pragma comment(lib, "Ws2_32.lib")

#define SERVER_GREETS   "You were connected to localhost. Welcome."
#define SERVER_BUY        "You were disconnected from localhost. Buy."
#define SERVER_PORT        1234

using namespace std;
 
int main ()
{
    string s;
    int err;
    WSAData WsData;
    if (err=WSAStartup(WsData.wVersion, &WsData)){
        cout << "Error";
        return 0;
    }
    SOCKET ServerSocket=socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in SA;
    SA.sin_family=AF_INET;
    SA.sin_addr.S_un.S_addr=INADDR_ANY;
    SA.sin_port=htons(SERVER_PORT);
    bind(ServerSocket, (sockaddr*)&SA, sizeof(SA));
    listen(ServerSocket, SOMAXCONN);
    SOCKET AcceptSocket;
    cout << "Wating for connection..." << endl;
    while ((AcceptSocket=accept(ServerSocket, 0, 0))!=INVALID_SOCKET){
        cout << "connected...\n";
        send(AcceptSocket, SERVER_GREETS, strlen(SERVER_GREETS), 0);
        char RecvData[32]={' '};
        int recvResult=0;
        do{
            recvResult = recv(AcceptSocket, RecvData, 32, 0);
            cout << "Look! I've got a message: " << RecvData << endl;
        }while (recvResult);
        
        send(AcceptSocket, SERVER_BUY, strlen(SERVER_BUY), 0);
        cout << "Disconnected" << endl;
        cout << "Wating for connection..." << endl;
        closesocket(AcceptSocket);

    }
}

Это особенности работы клиентов, telnet виндовский отсылает каждый символ при нажатии,так уж он устроен,а putty только по нажатию энтера.А вот что там за мусор летит,не понятно,посмотреть бы что именно там приходит,может служебные символы какие.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1292 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.