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


Автор: devmstr 29.5.2006, 19:04
Что не так. 
Сервер не получает сообщение.

Помогите, пожайлуста...
Сервер:
Код
#include <winsock2.h>
#include <windows.h>

#pragma comment(lib, "ws2_32.lib")

#define PORT 4736
WSADATA wsd;

DWORD WINAPI ReadThreadPrc(LPVOID lpParam)
{
    SOCKET sock = SOCKET(lpParam);
    WSABUF wsaBuf;
    char st[10];
    wsaBuf.buf = st;
    wsaBuf.len = 6;
    DWORD dwRes;
    while (1)
    {
        if (!WSARecv(sock, &wsaBuf,1, &dwRes, 0, 0, 0))
        {
            MessageBox(NULL, wsaBuf.buf, "Hello", 0);
        }
    }
    
    closesocket(sock);
    return 0;
}

INT WINAPI WinMain(HINSTANCE hInstm, HINSTANCE hPrevInst, LPSTR lpCmdLine, INT nCmdShow)
{
    
    SOCKET    sct;
    int        iErr;
    if (WSAStartup(MAKEWORD(2, 2), &wsd))
    {
        MessageBox(NULL, "Error load Winsock2", "Error", MB_ICONERROR);
        return 1;
    }
    sct    =    WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, NULL, 0);
    if (sct == INVALID_SOCKET)
    {
        MessageBox(NULL, "An error was appeared during creating a socket", "ERROR", MB_ICONERROR);
        return 2;
    }
    SOCKADDR_IN sca, sca_cl;
    sca.sin_family        = AF_INET;
    sca.sin_port        = htons(PORT);
    sca.sin_addr.s_addr = htonl(INADDR_ANY);
    bind(sct, (sockaddr *)&sca, sizeof(sca));
    
    if (listen(sct, SOMAXCONN))
    {
        MessageBox(NULL, "Listen returned error", "Error", MB_ICONERROR);
        iErr = WSAGetLastError();
        closesocket(sct);
        return 3;
    }
    int iSz = sizeof(sca_cl);
    HANDLE hThread;
    SOCKET sClient;
    while (1)
    {
        sClient = WSAAccept(sct, (sockaddr *)&sca_cl, &iSz, NULL, NULL);
        if (sClient == INVALID_SOCKET)
        {
            iErr = WSAGetLastError();
            MessageBox(NULL, "An error was appeared during Accept  socket", "ERROR", MB_ICONERROR);
        }
        hThread = CreateThread(NULL, NULL, ReadThreadPrc, (LPVOID)sClient, NULL, NULL);
        
    }
    CloseHandle(hThread);
    closesocket(sct);
    return 0;

}



Клиент:
Код
#include <winsock2.h>
#include <windows.h>

#pragma comment(lib, "ws2_32.lib")

#define PORT 4736
#define INETADDR "127.0.0.1"

INT WINAPI WinMain(HINSTANCE hInstm, HINSTANCE hPrevInst, LPSTR lpCmdLine, INT nCmdShow)
{
    WSADATA wsd;
    SOCKET    sct;
    if (WSAStartup(MAKEWORD(2, 2), &wsd))
    {
        MessageBox(NULL, "Error load Winsock2", "Error", MB_ICONERROR);
        return 1;
    }
    sct    =    WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, NULL, 0);
    if (sct == INVALID_SOCKET)
    {
        MessageBox(NULL, "An error was appeared during creating a socket", "ERROR", MB_ICONERROR);
        closesocket(sct);
        return 2;
    }
    
    SOCKADDR_IN sca;
    sca.sin_family        = AF_INET;
    sca.sin_port        = htons(PORT);
    sca.sin_addr.s_addr    = inet_addr(INETADDR);
    if (WSAConnect(sct, (sockaddr *)&sca, sizeof(sca), NULL, NULL, 0, 0))
    {
        MessageBox(NULL, "An error was appeared during connect", "ERROR", MB_ICONERROR);
        int t =WSAGetLastError();
        if (t ==WSAECONNREFUSED)
            MessageBox(NULL, "The attempt to connect was rejected", "ERROR", MB_ICONERROR);

        closesocket(sct);
        return 2;
    }
    WSABUF wsaBuf;
    wsaBuf.buf    = "Hello";
    wsaBuf.len    = strlen("Hello")+1;
    DWORD nSend;
    if (WSASend(sct, &wsaBuf, 1, &nSend, 0, NULL, NULL))
    {
        int iErr = WSAGetLastError();
        if (iErr == WSAENOBUFS)
            MessageBox(NULL, "Send Error; The Windows Sockets provider reports a buffer deadlock.", "ERROR", MB_ICONERROR);
        
    }
    closesocket(sct);
    return 0;

}
   

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