Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2011, 22:45   #1
vaan.sk
Пользователь
 
Аватар для vaan.sk
 
Регистрация: 10.03.2010
Сообщений: 30
По умолчанию Socket не отсылает сообщения через SEND и не принимает

Когда конектится клиент с сервером, сервер должен отображать то, что передает клиент, т.е. asdf, но он ничего не отображает. В другую сторону тоже самое. В чем проблема?

Сервер:
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

//---------------------------------------------------------------------------
enum {BUFSIZE=256};

int main(int argc, char* argv[])
{
        int sock, clnsock;
        int SRV_PORT;
        char ibuf[BUFSIZE], obuf[BUFSIZE];
        struct sockaddr_in san;
        //Создание серверного сокета
        WSADATA WsaData;

if (WSAStartup(0x0202, &WsaData))
        {
                printf ("WSAStartup() failed: %ld\n", GetLastError ());
                return -1;
        }

        if ( (sock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))!=SOCKET_ERROR)
                { san.sin_family = AF_INET;
                  cout << "Server Port: ";
                  cin >> SRV_PORT;
                        if (SRV_PORT < 1 || SRV_PORT > 65535)
                           {
                                cout << "Port Error";
                                return 0;
                           }
                  san.sin_port = htons (SRV_PORT);
                  san.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
        //привязка адреса и перевод в серверный режим
        if (bind(sock,(struct sockaddr*)&san,sizeof(san))==0 && listen (sock,1)==0)
                {//принмимаем соединение
                        if ((clnsock=accept(sock,NULL,0))!= SOCKET_ERROR)
                                { //получение запроса
                                        if (recv (clnsock, ibuf, sizeof(ibuf),0)>0)

                                                {printf (ibuf);
                                                //форм. рез-т.
                                                        strcat (strcpy(obuf,ibuf),ibuf);
                                                        //send message
                                                        send (clnsock, obuf, strlen(obuf)+1,0);
                                                      closesocket (clnsock);
                                                }
                                }
                                closesocket (sock);
                }
                return 0;

        }
}
//---------------------------------------------------------------------------
Клиент:
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <winsock2.h>

//---------------------------------------------------------------------------

enum {SRV_PORT=0x7777,BUFSIZE=256};
int main(int argc, char* argv[])
{
        int sock;
        char ibuf[BUFSIZE],obuf[BUFSIZE];
        struct sockaddr_in san;
        WSADATA WsaData;
        if (WSAStartup(0x0202, &WsaData))
        {
                printf ("WSAStartup() failed: %ld\n", GetLastError ());
                return -1;
        }

        if ((sock=socket(AF_INET,SOCK_STREAM,0))!= SOCKET_ERROR)
        {
                san.sin_family=AF_INET;
                san.sin_port=htons(SRV_PORT);
                san.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
                int check_con;
                if (connect(sock,(struct sockaddr*)&san, sizeof(san))!=0)
                        {//формируем запрос
                                strcpy (obuf, "asdf");
                        //отпр запроса и получение результата
                        if (send (sock,obuf,strlen(obuf)+1,0)>0&&recv (sock, ibuf, sizeof(ibuf),0)>0)
                        printf ("result:%s\n",ibuf);
                        }
        }
        closesocket (sock);

        return 0;

}
//---------------------------------------------------------------------------
vaan.sk вне форума Ответить с цитированием
Старый 22.06.2011, 20:57   #2
Мастак
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 19
По умолчанию

Я сам учусь винсокетам и у меня кое какие предположения только.
В серверной части может на надо сокет закрывать ? Закрывая его ты вроде закрываешь и сервер .
Вот думаю полезная для тебя страничка будет.
http://www.firststeps.ru/mfc/net/socket/socket1.html
Вот ещё думаю полезно будет )
http://www.insidepro.com/kk/006/006r.shtml

Последний раз редактировалось Мастак; 22.06.2011 в 21:01.
Мастак вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка e-mail сообщения с форматированием через SMTP chandrasecar Работа с сетью в Delphi 1 10.09.2014 21:29
Как передать структуру через socket moiav Общие вопросы C/C++ 6 18.05.2011 16:27
Работа программы через сеть - ошибка Socket Error #11004 ??? $T@LKER Помощь студентам 2 30.07.2010 14:20
send/recv: размер сообщения cw_o Работа с сетью в Delphi 4 23.04.2010 19:00
Отправка сообщения через компонент RzSendMessage artemavd Работа с сетью в Delphi 0 01.04.2010 07:43