不期而遇123 2019-06-02 12:16 采纳率: 0%
浏览 524

DEVC++中使用winsock2进行TCP编程的客户端无法接收到服务器返回数据的问题

在客户端输入两个数字,发送到服务器端,服务器接收后进行在做和运算,将结果返回给客户端,但现在无法接收到返回数据。客服端连接是没有问题的。
代码如下:

服务端
SOCKET  AcceptSocket;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);

AcceptSocket = accept( s,(SOCKADDR*) &remoteAddr,&nAddrlen);
if (AcceptSocket == INVALID_SOCKET)
{
    cout<<"Accept socket fali!"<<endl;
    ::closesocket(s);
    ::WSACleanup( );
    return 1;
}

//6.收发数据
//退出标记
BOOL  QuitFlag = FALSE;

while(!QuitFlag)
{
    //接收数据
    int Buffer[1024]={0};
    //char Buf[255];
    nRetuen = ::recv(AcceptSocket,(char*)&Buffer,1024,QuitFlag);

    //判断情况
    switch (nRetuen)
    {
    case 0:
        {
            //::closesocket(AcceptSocket);
            //::closesocket(s);
            //::WSACleanup( );
            cout << "client's connection is closed!" << endl;
        }
        break;
    case SOCKET_ERROR :
        {
            //::closesocket(AcceptSocket);
            //::closesocket(s);
            //::WSACleanup( );
            cout << "server's connection is closed!" << endl;
            break;
        }

    default:
        {
            if (Buffer[0] == 0  &&  Buffer[1] == 0)
            {
                QuitFlag = TRUE;
            }
            else
            {
                int result = Buffer[0] + Buffer[1];
                cout <<Buffer[0]  <<" + "<<Buffer[1] <<" = " <<result <<endl;
                //发送数据
                send(s,(char*)&result,1024,0);
                cout<<"send success!"<<endl;

            }

        }
    }

}



客户端
    int data[1024] = {0};
while (1)
{
    cin >> data[0] >> data[1];
    fflush( stdin );

    nRetuen =  ::send(sockClient,(char*)&data,1024,0);
    int error = 0;
    if (nRetuen == SOCKET_ERROR)
    {
        error = WSAGetLastError();
        cout<<"send fail!"<<endl;
    }

    if (data[0] == 0  && data[1] == 0)
    {
        cout << " Client will  quit!" <<endl;
        break;
    }
    //send(sockClient,(char*)&data[2],sizeof(data[2]),0);
    //5.接收数据
    int sum=0;
    int recvbuffer[1024]={0};
    memset(recvbuffer,0,1024);
    nRetuen = ::recv(sockClient,(char*)&recvbuffer,1024,0);

    if(nRetuen > 0)
    {
        sum = (int*)&recvbuffer;
        cout << data[0] << " + " << data[1] << " = " << sum;;
    }
    else if (nRetuen == 0)
    {
        error = WSAGetLastError();
        cout<<"receive fail!"<<endl;
    }
    else
    {
    cout << "SOCKET_ERROR"<<endl;
    }
}

客户端

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-06-02 20:01
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波