1

我尝试建立客户端服务器连接,我尝试从客户端发送数据并由服务器接收。我从互联网上修改程序,但结果并不令人满意。客户端和服务器之间的连接已经建立,但是客户端不能向服务器发送数据。

有人能告诉我这些程序有什么问题吗?

服务器

 #include <Windows.h>
 #include <iostream>

 using namespace std;

 SOCKADDR_IN addr;
 SOCKET sListen;
 SOCKET sConnect;
 SOCKET Connections;

 int addrlen = sizeof(addr);
 int ConCounter = 0;
 struct Buffer
{
char Message[256];
};


int InitWinSock()
{
int RetVal = 0;
WSAData wsaData;
WORD DllVersion = MAKEWORD(2,1);
RetVal = WSAStartup(DllVersion, &wsaData);

return RetVal;
}

 int main()
 {
int RetVal = 0;
RetVal = InitWinSock();
if(RetVal != 0)
{
    MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR);
    exit(1);
}

Connections = (SOCKET)calloc(1, sizeof(SOCKET));
sListen = socket(AF_INET, SOCK_STREAM, NULL);
sConnect = socket(AF_INET, SOCK_STREAM, NULL);

addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port        = htons(1234);
addr.sin_family      = AF_INET;

bind(sListen, (SOCKADDR*)&addr, sizeof(addr));

listen(sListen, 1); 

for(;; Sleep(50))
{
    if(sConnect = accept(sListen, (SOCKADDR*)&addr, &addrlen))
    {
        cout<<"connection was found";

        for(;; Sleep(50))
{
        Buffer sbuffer;
        char* Recv = new char[256];
        ZeroMemory(Recv, 256);      
        if(recv(Connections, Recv, 256, NULL))
        {       
            cout<<Recv<<endl;           
            ZeroMemory(Recv, 256);
        }
        }               
    }
}
return 0;
}

客户:

 #pragma comment(lib, "Ws2_32.lib")
 #include <WinSock2.h>
 #include <Windows.h>
 #include <iostream>

 using namespace std;

 SOCKADDR_IN addr;

 SOCKET sConnect;

 struct Buffer
{

char Message[256];
};

 int main()
{
system("cls");

int RetVal = 0;

WSAData wsaData;
WORD DllVersion = MAKEWORD(2,1);
RetVal = WSAStartup(DllVersion, &wsaData);
if(RetVal != 0)
{                                                                                                                                                                                                   
    MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR);
    exit(1);
}

sConnect = socket(AF_INET, SOCK_STREAM, NULL);

addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port        = htons(1234);
addr.sin_family      = AF_INET;

cout << "Connect to Masterserver? [ENTER]" <<endl;
getchar();
RetVal = connect(sConnect, (SOCKADDR*)&addr, sizeof(addr));

if(RetVal != 0)
{
    MessageBoxA(NULL, "Could not connect to server", "Error", MB_OK | MB_ICONERROR);
    main();
}
else
{

    cout << "Connected" <<endl;


    for(;; Sleep(10))
    {
        char* buffer = new char[256];
        ZeroMemory(buffer, 256);

        cin >> buffer;
        getchar();

        send(sConnect, buffer, 256, NULL);
    }
}

return 0;
 }
4

1 回答 1

0

recv(Connections应该是recv(sConnect。请参阅我对您的问题的评论,以获取代码中其他更小错误的列表。

于 2013-03-05T04:10:53.933 回答