gksakura 2015-12-13 16:35 采纳率: 100%
浏览 1892
已采纳

客户端发送消息给服务端后,服务端应答无效

连接建立了,语言C++。前端是用cocos2d封装好的。
目前是:客户端向服务端send:服务端能接到;服务端向客户端send:客户端能接到。
但是:客户端向服务端send,服务端接到后立即应答向客户端send,客户端就接不到。
代码如下:
客户端:(在一个按钮中触发)

gksock->connect_(5500,"127.0.0.1");
struct gksakura
{
    int a;
    char b[32];
};
struct gksakura gk;
ZeroMemory(&gk,sizeof(gk));
gk.a=32;
strcpy(gk.b,"matousakura");
char ans[64];
ZeroMemory(ans,sizeof(ans));
auto errcode =gksock->send((char*)&gk,128);
if (errcode!=SOCKET_ERROR)
{
    CCLOG("!!!!!!!!!!!!!!!!!!!!!!!!!");
    gksock->recv(ans,128);
    CCLOG("%s",ans);
}
gksock->close();

服务端:

        while(1)
        {

        SOCKET sClient=accept(sServer,(SOCKADDR*)&addrclient,&addrclientlen);printf("accetp ing!\n");
        if (sClient==INVALID_SOCKET)
        {
            printf("accept failed!\n");
            break;
        }

        struct gksakura
        {
            int a;
            char b[32];
        };
        struct gksakura gk;
        ZeroMemory((char*)&gk,sizeof((char*)&gk));
        char ans[]="get it!";
        errcode=recv(sClient,(char*)&gk,128,0);printf("recv ing!\n");
        if (errcode==SOCKET_ERROR)
        {
            printf("recv failed!\n");
            closesocket(sClient);
            break;
        }
        else
        {
            printf("%d\n%s\n",gk.a,gk.b);
            printf("want to send %s\n",ans);
            errcode=send(sClient,ans,128,0);printf("send ing!\n");
            if (errcode==SOCKET_ERROR)
            {
                printf("send failed!\n");
                closesocket(sClient);
                break;
            }
        }
        closesocket(sClient);

        }
        closesocket(sServer);printf("close!\n");
        WSACleanup();
  • 写回答

1条回答 默认 最新

  • 云霏阳 2015-12-14 00:33
    关注

    楼主,你代码内存越界了
    1.客户端发送的时候,读越界,接收的时候,写越界;
    2.服务器接收的时候,写越界,发送的时候,读越界。
    建议代码修改如下:
    1.客户端
    auto errcode =gksock->send((char*)&gk,sizeof(gk));
    gksock->recv(ans,sizeof(ans));
    2.服务器
    errcode=recv(sClient,(char*)&gk,sizeof(gk),0);printf("recv ing!\n");
    errcode=send(sClient,ans,strlen(ans),0);printf("send ing!\n");

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 apk可以在模拟器上正常安装使用,但是手机上无法正常安装
  • ¥15 office打开卡退(新电脑重装office系统后)
  • ¥300 FLUENT 火箭发动机燃烧EDC仿真
  • ¥15 【Hadoop 问题】Hadoop编译所遇问题hadoop-common: make failed with error code 2
  • ¥15 vb6.0+webbrowser无法加载某个网页求解
  • ¥15 RPA财务机器人采购付款流程
  • ¥15 计算机图形多边形及三次样条曲线绘制
  • ¥15 根据protues画的图用keil写程序
  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误