ФорумПрограммированиеБольше языковC/C++ и C# → C++. Клиент-сервер - завершение преложений после создания соединения

C++. Клиент-сервер - завершение преложений после создания соединения

  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 14 ноября 2009 г. 18:48, спустя 9 часов 33 минуты 3 секунды

    если кому надо вот рабочий код
    #include <stdio.h>
    #include <iostream>
    #include <winsock2.h>

    DWORD WINAPI ThreadFunc(LPVOID s1)
    {
    SOCKET s2=((SOCKET *) s1)[0];
    char buf[100];
    memset(buf, 0, sizeof(buf));
    while(recv(s2,buf,100,0)){
    std::cout<<buf;
    send(s2,buf,100,0);
    }
    closesocket(s2);
    return 0;
    }

    int main(){

    WSADATA WsaData;
    struct sockaddr_in local;
    int s;
    int rc;
    int err = WSAStartup (0x0101, &WsaData);
    if (err == SOCKET_ERROR)
    {
    printf ("WSAStartup() failed: %ld\n", GetLastError ());
    return 1;
    }

    local.sin_family = AF_INET;
    local.sin_port = htons(7500);
    local.sin_addr.s_addr = htonl(INADDR_ANY);
    s = socket(AF_INET,SOCK_STREAM,0);
    SOCKET s1;
    if (s<0){
    perror("socket error");
    exit(1);
    }else{
    std::cout<<"Create sock: OK\n";
    }
    rc = bind(s,(struct sockaddr*)&local, sizeof(local));
    if (rc<0){
    perror("bind error");
    exit(1);
    }else{
    std::cout<<"Bind: OK\n";
    }

    rc = listen(s,5);
    if(rc){
    perror("listen error");
    exit(1);
    }else{
    std::cout<<"Listen: OK\n";
    }
    int local2=sizeof(local);
    while(s1=accept(s,0,0)){

    DWORD thID;
    CreateThread(NULL,NULL,ThreadFunc,&s1,NULL,&thID);

    }
    return 0;
    }
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 26 ноября 2009 г. 11:40, спустя 11 дней 16 часов 51 минуту

    читать не реально такой код
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 27 ноября 2009 г. 17:29, спустя 1 день 5 часов 49 минут

    Frozzeg, :)
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 27 ноября 2009 г. 17:49, спустя 20 минут 11 секунд

    Frozzeg, Mr.Pihto, нереально читать код на перле
  • tmt

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 5 ноября 2011 г. 8:52, спустя 707 дней 14 часов 2 минуты


    если кому надо вот рабочий код
    #include <stdio.h>
    #include <iostream>
    #include <winsock2.h>

    DWORD WINAPI ThreadFunc(LPVOID s1)
    {
    SOCKET s2=((SOCKET *) s1)[0];
    char buf[100];
    memset(buf, 0, sizeof(buf));
    while(recv(s2,buf,100,0)){
    std::cout<<buf;
    send(s2,buf,100,0);
    }
    closesocket(s2);
    return 0;
    }

    int main(){

    WSADATA WsaData;
    struct sockaddr_in local;
    int s;
    int rc;
    int err = WSAStartup (0x0101, &WsaData);
    if (err == SOCKET_ERROR)
    {
    printf ("WSAStartup() failed: %ld\n", GetLastError ());
    return 1;
    }

    local.sin_family = AF_INET;
    local.sin_port = htons(7500);
    local.sin_addr.s_addr = htonl(INADDR_ANY);
    s = socket(AF_INET,SOCK_STREAM,0);
    SOCKET s1;
    if (s<0){
    perror("socket error");
    exit(1);
    }else{
    std::cout<<"Create sock: OK\n";
    }
    rc = bind(s,(struct sockaddr*)&local, sizeof(local));
    if (rc<0){
    perror("bind error");
    exit(1);
    }else{
    std::cout<<"Bind: OK\n";
    }

    rc = listen(s,5);
    if(rc){
    perror("listen error");
    exit(1);
    }else{
    std::cout<<"Listen: OK\n";
    }
    int local2=sizeof(local);
    while(s1=accept(s,0,0)){

    DWORD thID;
    CreateThread(NULL,NULL,ThreadFunc,&s1,NULL,&thID);

    }
    return 0;
    }



    Привет, я новичек в C++, но немного знаком с другими языками. Создаю проект (консольное прил. win32) галку ставлю что проект пустой, там создаю в исх коде cpp в него вставляю код. нажимаю зеленую кнопочку (запуск.)
    и выдает

    1>—— Построение начато: проект: 6, Конфигурация: Debug Win32 ——
    1>Компиляция…
    1>1.cpp
    1>Компиляция манифеста в ресурсы…
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation. All rights reserved.
    1>Компоновка…
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__closesocket@4 в функции "unsigned long __stdcall ThreadFunc(void *)" (?ThreadFunc@@YGKPAX@Z)
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__send@16 в функции "unsigned long __stdcall ThreadFunc(void *)" (?ThreadFunc@@YGKPAX@Z)
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__recv@16 в функции "unsigned long __stdcall ThreadFunc(void *)" (?ThreadFunc@@YGKPAX@Z)
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__accept@12 в функции _main
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__listen@8 в функции _main
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__bind@12 в функции _main
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__socket@12 в функции _main
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__htonl@4 в функции _main
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__htons@4 в функции _main
    1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSAStartup@8 в функции _main
    1>C:\****************\Visual Studio 2008\Projects\6\Debug\6.exe : fatal error LNK1120: 10 неразрешенных внешних элементов
    1>Журнал построения был сохранен в "file://c:\****************\Visual Studio 2008\Projects\6\6\Debug\BuildLog.htm"
    1>6 - ошибок 11, предупреждений 0
    ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

    Подскажите пожулуйста, как это исправить.. попробовал уже и в 2010, и в 2008.. потом какую то хрень скачал wxDev-C++ ( читая темку _http://pyha.ru/forum/topic/6691.0 ).. незнаю что уже делать!
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 5 ноября 2011 г. 9:09, спустя 16 минут 54 секунды

    вставить этот код после всех директив #include
    #pragma comment(lib, "Ws2_32.lib")
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • tmt

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 5 ноября 2011 г. 9:13, спустя 4 минуты 38 секунд

    Frozzeg, Спасибо!) получилось
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 5 ноября 2011 г. 11:00, спустя 1 час 47 минут 3 секунды

    лудше всетаки в настройках проекта в список используемых библиотек добавить
    Work, buy, consume, die
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 12 декабря 2011 г. 15:48, спустя 37 дней 5 часов 47 минут

    using namespace std; для слабаков….?!?
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 12 декабря 2011 г. 16:04, спустя 16 минут 8 секунд


    Frozzeg, Mr.Pihto, нереально читать код на перле


    бывает вполне реально иногда)

    using namespace std; для слабаков….?!?

    Вроде тут оно не так критично ибо не так часто употребляется, не согласен разве что с такой записью:
    std::cout<<"Create sock: OK\n";

    тру-вей использовать std:endl
    cout << "Create sock" << endl;

Пожалуйста, авторизуйтесь, чтобы написать комментарий!