Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > C/C++: Сетевое программирование > Socket


Автор: vovikdrg 20.07.04, 07:52
Народ помогите розобратся с прогой клиент-сервер. Прикол такой создаю сокет прослушеваю все как положено но не могу получит даные с клиента. При запуске автоматически сервер выдает сообщение (ММММММММММММяяя). я пробывал выводить то что получу. Если не сложно киньте код клиент сервера за рание благодарен. :wall:

Автор: ViGOur 20.07.04, 08:01
Выложить пример это конечно проще простого, но нужно самому разобраться как и что работает!
Приведи код как отправляешь как получаешь...

Автор: vovikdrg 20.07.04, 08:07
Отсылаю
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    send(s,"drg",3,MSG_OOB)

прием
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    recv(s,buf,sizeof(buf));
    AfxMessageBox(buf);

Автор: Gunnar 20.07.04, 08:20
А где 4-тый параметр для recv?
попробуй юзать 0 вместо MSG_OOB, хотя врядли в этом дело...

А коннект нормально устанавливается?

Автор: vovikdrg 20.07.04, 08:23
Коннект нормально проблема в получении и отправке

Автор: Gunnar 20.07.04, 08:28
Опиши поподробнее!

Ты свойтва сокетов правильно выставил?
Такой код будет работать только для блокирующих.
Тип сокета? Потоковый?

Еще раз: 4-тый параметр для recv какой?
А буфер для получения правильно выделил?

Что из тебя все вытятивать нада? ( Партизан блин :) )

Автор: ViGOur 20.07.04, 10:57
Цитата vovikdrg @ 20.07.04, 12:07
прием
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    recv(s,buf,sizeof(buf));
    AfxMessageBox(buf);

Вообще-то, 3 параметр в recv это длина buf, а не колличество байт! ;)
Другими словами нужно так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    int nRecv=recv(s,buf,strlen(buf), 0);
    buf[nRecv]=0;
    AfxMessageBox(buf);

Автор: Olega 20.07.04, 11:54
Цитата

send(s,"drg",3,MSG_OOB);

Почему 3, а не 4. Где конец файла?

Автор: vovikdrg 21.07.04, 22:27
Сервер
[/CODE]int s;
s=socket(AF_INET,SOCK_STREAM,0);

sockaddr_in local_addr;
local_addr.sin_family=AF_INET;
local_addr.sin_port=PORT;// не забываем о сетевом порядке
local_addr.sin_addr.s_addr=0;// сервер принимает подключения на все IP-адреса
bind(s,(sockaddr *) &local_addr,sizeof(local_addr));
listen(s,100);

sockaddr_in client_addr;
int client_addr_size=sizeof(client_addr);
accept(s,(sockaddr*)&client_addr, &client_addr_size);
char buf[5];
int nRecv=recv(s,buf,strlen(buf), 1);
if (nRecv==1)
{
buf[nRecv]=0;
AfxMessageBox(buf);
}
shutdown(s,1);
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    и Вот клиент
int s;
s=socket(AF_INET,SOCK_STREAM,0);

sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = PORT;
//server_addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.2");
connect (s, (sockaddr* )&server_addr, sizeof (server_addr));
char buf[5]="OK";
send (s,"ok",2,MSG_OOB);
shutdown(s,0);
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    проблема в том что когда запускаю сервер выдаэт окно в котором (МММММ). в чем тут проблема
     
    [color=gray][size=1][b]Добавлено в <time class="tag-mergetime" datetime="2004-07-21T22:31:00+00:00">21.07.04, 22:31</time>[/b]:[/size][/color]
    Сервер[CODE]
    int s;
        s=socket(AF_INET,SOCK_STREAM,0);
            
        sockaddr_in     server_addr;    
        server_addr.sin_family      = AF_INET;
        server_addr.sin_addr.s_addr = INADDR_ANY;
        server_addr.sin_port        = PORT;
        //server_addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.2");
        connect (s, (sockaddr* )&server_addr,  sizeof (server_addr));
        char buf[5]="OK";
        send (s,"ok",2,MSG_OOB);
        shutdown(s,0);

Клиент
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    int s;
    s=socket(AF_INET,SOCK_STREAM,0);
     
    sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = PORT;
    //server_addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.2");
    connect (s, (sockaddr* )&server_addr, sizeof (server_addr));
    char buf[5]="OK";
    send (s,"ok",2,MSG_OOB);
    shutdown(s,0);

Чтобы удобней было

Автор: __SKV 21.07.04, 23:00
Попробуй это вставить в начало и сервака и клиента.

WSADATA Wsa = {0};
if(WSAStartup(0x0101,&Wsa) != 0)
{
return 0;
}

Автор: Laco 21.07.04, 23:27
Цитата vovikdrg @ 22.07.04, 01:27
Сервер
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    connect (s, (sockaddr* )&server_addr,  sizeof (server_addr));

А куда сервер коннектится ? Сервер должен слушать, для этого нужно вызывать bind и listen, а клиент уже потом коннектится к серверу на его(сервера) порт.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)