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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 19:46   #1
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию С\С++ Работа с сокетами\Клиент серверное приложение

Тривиальная во всем интернете проблема. Нашёл в инете код
Код:
#include <stdio.h>
#include <winsock2.h> 
#include <windows.h>
#define MY_PORT 666 
#define PRINTNUSERS if (nclients) printf("%d user on-line\n", nclients); \
        else printf("No User on line\n");
DWORD WINAPI SexToClient(LPVOID client_socket);
int nclients = 0;
int main(int argc, char* argv[])
{  char buff[1024]; 
    printf("TCP SERVER DEMO\n");
     if (WSAStartup(0x0202, (WSADATA *)&buff[0]))
    {  printf("Error WSAStartup %d\n", WSAGetLastError());
        return -1;
    }
    SOCKET mysocket;
     if ((mysocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {  printf("Error socket %d\n", WSAGetLastError());
        WSACleanup(); 
        return -1;
    }
    sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(MY_PORT); 
    local_addr.sin_addr.s_addr = 0; 
    if (bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr)))
    {   printf("Error bind %d\n", WSAGetLastError());
        closesocket(mysocket); 
        WSACleanup();
        return -1;
    }
   if (listen(mysocket, 0x100))
    {  printf("Error listen %d\n", WSAGetLastError());
        closesocket(mysocket);
        WSACleanup();
        return -1;
    }
    printf("Ожидание подключений...\n");
    SOCKET client_socket;
    sockaddr_in client_addr;
    int client_addr_size = sizeof(client_addr);
    while ((client_socket = accept(mysocket, (sockaddr *)&client_addr, \
           &client_addr_size)))
    {  nclients++; 
        HOSTENT *hst;
        hst = gethostbyaddr((char *)&client_addr. sin_addr.s_addr, 4, AF_INET);
        printf("+%s [%s] new connect!\n",
        (hst) ? hst->h_name : "", inet_ntoa(client_addr.sin_addr));
        PRINTNUSERS
        DWORD thID;
        CreateThread(NULL, NULL, SexToClient, &client_socket, NULL, &thID);
    }
    return 0;
}
DWORD WINAPI SexToClient(LPVOID client_socket)
{   SOCKET my_sock;
    my_sock = ((SOCKET *)client_socket)[0];
    char buff[20 * 1024];
    #define sHELLO "Hello, Sailor\r\n"
    send(my_sock, sHELLO, sizeof(sHELLO), 0);
    int bytes_recv;
    while ((bytes_recv = recv(my_sock, &buff[0], sizeof(buff), 0)) &&
    bytes_recv != SOCKET_ERROR)
    send(my_sock, &buff[0], bytes_recv, 0);
    nclients--;
    printf("-disconnect\n"); PRINTNUSERS
    closesocket(my_sock);
    return 0;
}
При сборке вылазят ошибки :
C:\MinGW\bin\mingw32-g++.exe -Wall -o "super" "super.cpp" (в каталоге: C:\Program Files (x86)\Geany)
undefined reference to `WSAStartup@8'
undefined reference to `WSAGetLastError@0'
undefined reference to `socket@12'
undefined reference to `WSAGetLastError@0'
undefined reference to `WSACleanup@0'
undefined reference to `htons@4'
undefined reference to `bind@12'
undefined reference to `WSAGetLastError@0'
undefined reference to `closesocket@4'
undefined reference to `WSACleanup@0'
undefined reference to `listen@8'
undefined reference to `WSAGetLastError@0'
undefined reference to `closesocket@4'
undefined reference to `WSACleanup@0'
undefined reference to `gethostbyaddr@12'
undefined reference to `inet_ntoa@4'
undefined reference to `accept@12'
undefined reference to `send@16'
undefined reference to `send@16'
undefined reference to `recv@16'
undefined reference to `closesocket@4'

если прописать:
Код:
 #pragma comment(lib, "WSock32.lib")
то выдает super.cpp:6:0: warning: ignoring #pragma comment
Что за беда?
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Старый 19.11.2011, 20:09   #2
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

а когда пытаюсь подключить напрямую:
Код:
#include <C:\WS2_32.Lib>
Geany тупо виснет)
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Старый 19.11.2011, 21:05   #3
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Удалите это сообщение пожалуйста
До последней точки с запятой в коде...

Последний раз редактировалось Necare; 19.11.2011 в 22:30.
Necare вне форума Ответить с цитированием
Старый 19.11.2011, 21:06   #4
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Проблема решена, нужно было в параметрах сборки прописать:
Код:
-lws2_32
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
клиент-серверное приложение roxy1807 БД в Delphi 0 19.04.2011 19:02
Клиент-серверное приложение Mixim C# (си шарп) 1 25.03.2011 01:26
Клиент Серверное приложение BARNEY Общие вопросы Delphi 2 28.10.2010 09:30
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18
Клиент-серверное приложение veryseldom Работа с сетью в Delphi 8 20.08.2007 19:57