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


Автор: WolfON 20.3.2005, 20:08
Кароче, как сделать прогу - простой клиент-серв, типа чтобы отправлять друг-другу сообщения текстовые, как на дельфе Server- Client- Socket
smile smile smile

Автор: Ni@m 21.3.2005, 10:50
Юзай готовый класс Socket!

Автор: WolfON 21.3.2005, 22:07
Я не зря поставил 3 смайла - хочу пример.

Нужен пример реализации такого клиент-сервера, компилятор.

Автор: jorkug 22.3.2005, 07:01
Microsoft Visual C++:
Код

DWORD WINAPI ClientThread(LPVOID lpParam)
{
    SOCKET        sock=(SOCKET)lpParam;
    char          szRecvBuff[1024],
                  szSendBuff[1024];
    int           ret;

    while(1)
    {
        ret = recv(sock, szRecvBuff, 1024, 0);
        if (ret == 0)
            break;
        else if (ret == SOCKET_ERROR)
        {
            MessageBox(0, "Recive data filed", "Error", 0);
            break;
        }
        szRecvBuff[ret] = '\0';

        strcpy(szSendBuff, "Command get OK");

        ret = send(sock, szSendBuff, sizeof(szSendBuff), 0);
        if (ret == SOCKET_ERROR)
        {
           break;
        }
    }
    return 0;
}

DWORD WINAPI NetThread(LPVOID lpParam)
{
    SOCKET        sServerListen;
    SOCKET        sClient;
    struct sockaddr_in localaddr;
    struct sockaddr_in clientaddr;
    HANDLE        hThread;
    DWORD         dwThreadId;
    int           iSize;

    sServerListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if (sServerListen == SOCKET_ERROR)
    {
        MessageBox(0, "Can't load WinSock", "Error", 0);
        return 0;
    }
    localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    localaddr.sin_family = AF_INET;
    localaddr.sin_port = htons(5050);

    if (bind(sServerListen, (struct sockaddr *)&localaddr, 
            sizeof(localaddr)) == SOCKET_ERROR)
    {
        MessageBox(0, "Can't bind", "Error", 0);
        return 1;
    }
    
    MessageBox(0, "Bind OK", "Error", 0);

    listen(sServerListen, 4);

    MessageBox(0, "Listen OK", "Error", 0);
    while (1)
    {
        iSize = sizeof(clientaddr);
        sClient = accept(sServerListen, (struct sockaddr *)&clientaddr,
                        &iSize);        
        if (sClient == INVALID_SOCKET)
        {        
            MessageBox(0, "Accept filed", "Error", 0);
            break;
        }

        hThread = CreateThread(NULL, 0, ClientThread, 
                    (LPVOID)sClient, 0, &dwThreadId);
        if (hThread == NULL)
        {
            MessageBox(0, "Create thread filed", "Error", 0);
            break;
        }
        CloseHandle(hThread);
    }
    closesocket(sServerListen);
    return 0;
}

Автор: Гость_Bodrox 2.4.2005, 12:33
Вот что сказал...
Код

--------------------Configuration: Serv - Win32 Debug--------------------
Compiling...
Serv.cpp
Linking...
Serv.obj : error LNK2001: unresolved external symbol _send@16
Serv.obj : error LNK2001: unresolved external symbol _recv@16
Serv.obj : error LNK2001: unresolved external symbol _closesocket@4
Serv.obj : error LNK2001: unresolved external symbol _accept@12
Serv.obj : error LNK2001: unresolved external symbol _listen@8
Serv.obj : error LNK2001: unresolved external symbol _bind@12
Serv.obj : error LNK2001: unresolved external symbol _htons@4
Serv.obj : error LNK2001: unresolved external symbol _htonl@4
Serv.obj : error LNK2001: unresolved external symbol _socket@12
Debug/Serv.exe : fatal error LNK1120: 9 unresolved externals
Error executing link.exe.

Serv.exe - 10 error(s), 0 warning(s)

Автор: Ni@m 2.4.2005, 13:11
А ты либы подключил при компиляции?

Автор: jorkug 4.4.2005, 16:27
Сокеты и все с ними связанное лежит в Ws2_32.lib.

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