没有什么要求,就是客户端可以向服务器端发送接收数据
服务器端可以向客户端发送接收数据。
本人初次接触Socket编程,求各位大神指教

解决方案 »

  1.   

    使用socket通信就可以实现啦,只是不知道你要什么东西,大概是服务端 :WIN32:SOCKET s = socket();
    bind(s)
    listen(s)
    SOCKET ss = accept(s);recv(ss);
    send(ss);客户端:WIN32:SOCKET s = socket(s);connect(s);send(s);recv(s);
      

  2.   

    //server.cpp  
    while ( true )
        {
            memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
            Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
            if ( Ret == 0 || Ret == SOCKET_ERROR ) 
            {
                cout<<"客户端退出!"<<endl;
                break;
            }
            cout<<"接收到客户信息为:"<<RecvBuffer<<endl;
        }//client.cpp
    while ( true )
        {
            cin.getline(SendBuffer, sizeof(SendBuffer));
            Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
            if ( Ret == SOCKET_ERROR )
            {
                cout<<"Send Info Error::"<<GetLastError()<<endl;
                break;
            }
        }
    上面的代码只能是客户端发送信息 接收端接收信息.怎么在上面完善一些,使得双方可以互相发送信息
      

  3.   

    这个问题,本身没有一个确定的回答,如何双方发送消息取决你的协议设计,方法有很多,不外乎是,多线程:一个线程接收数据,一个线程发送数据WIN32的完成端口结构,注册事件
      

  4.   

    //Server.cpp
    #include <iostream>
    #include <Windows.h>using namespace std;#pragma comment(lib,"ws2_32.lib")#define  PORT 4000
    #define  IP_ADDRESS "127.0.0.1"DWORD WINAPI ClientThread(LPVOID lpParameter)
    {
        SOCKET CientSocket = (SOCKET)lpParameter;
        int Ret = 0;
        char RecvBuffer[MAX_PATH];    while ( true )
        {
            memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
            Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
            if ( Ret == 0 || Ret == SOCKET_ERROR ) 
            {
                cout<<"客户端退出!"<<endl;
                break;
            }
            cout<<"接收到客户信息为:"<<RecvBuffer<<endl;
        }    return 0;
    }int main(int argc, char* argv[])
    {
        WSADATA  Ws;
        SOCKET ServerSocket, CientSocket;
        struct sockaddr_in LocalAddr, ClientAddr;
        int Ret = 0;
        int AddrLen = 0;
        HANDLE hThread = NULL;    //Init Windows Socket
        if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )//打开winsock
        {
            cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
            return -1;
        }
        
        //Create Socket
        ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//建立套接字
        if ( ServerSocket == INVALID_SOCKET )
        {
            cout<<"Create Socket Failed::"<<GetLastError()<<endl;
            return -1;
        }
        //初始化LocalAddr
        LocalAddr.sin_family = AF_INET;
        LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
     //  LocalAddr.sin_addr.s_addr = INADDR_ANY;
     // INADDR_ANY 表示下面的函数bind函数把刚才创建的socket绑定到当前的电脑的IP地址上。
        LocalAddr.sin_port = htons(PORT);//主机序转化为网络序
        memset(LocalAddr.sin_zero, 0x00, 8);    //Bind Socket 服务器绑定端口
        Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));
        if ( Ret != 0 )
        {
            cout<<"Bind Socket Failed::"<<GetLastError()<<endl;
            return -1;
        }    Ret = listen(ServerSocket, 10);
        if ( Ret != 0 )
        {
            cout<<"listen Socket Failed::"<<GetLastError()<<endl;
            return -1;
        }    cout<<"服务端已经启动"<<endl;    while ( true )
        {
            AddrLen = sizeof(ClientAddr);
            CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);
            if ( CientSocket == INVALID_SOCKET )
            {
                cout<<"Accept Failed::"<<GetLastError()<<endl;
                break;
            }        cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<" 端口号:"<<ClientAddr.sin_port<<endl;
            
            hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);
            if ( hThread == NULL )
            {
                cout<<"Create Thread Failed!"<<endl;
                break;
            }        CloseHandle(hThread);
        }    closesocket(ServerSocket);
        closesocket(CientSocket);
        WSACleanup();    return 0;
    }
    例如这个用tcp协议的程序 怎么把他改成双线程 一个线程监听接收  一个线程去发送信息呢?