网络编程-客户端发送消息给服务端后,服务端应答无效

问题描述

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

连接建立了,语言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!
");
        if (sClient==INVALID_SOCKET)
        {
            printf("accept failed!
");
            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!
");
        if (errcode==SOCKET_ERROR)
        {
            printf("recv failed!
");
            closesocket(sClient);
            break;
        }
        else
        {
            printf("%d
%s
",gk.a,gk.b);
            printf("want to send %s
",ans);
            errcode=send(sClient,ans,128,0);printf("send ing!
");
            if (errcode==SOCKET_ERROR)
            {
                printf("send failed!
");
                closesocket(sClient);
                break;
            }
        }
        closesocket(sClient);

        }
        closesocket(sServer);printf("close!
");
        WSACleanup();

解决方案

楼主,你代码内存越界了
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!
");
errcode=send(sClient,ans,strlen(ans),0);printf("send ing!
");

解决方案二:

黑马程序员-网络编程客户端向服务端发送文件

时间: 2024-09-30 08:35:53

网络编程-客户端发送消息给服务端后,服务端应答无效的相关文章

服务器-socket客户端发送消息问题

问题描述 socket客户端发送消息问题 现在需求是两个客户端和一个服务端,一个客户端向服务端发送消息,然后服务端再将消息发送给第二个客户端,都是长连接,第一次发送没问题,但是再点发送第二个客户端就收不到消息了,服务器也收不到(下面服务端代码) 解决方案 通过这个来看的话,你的服务端实际上也就是相当于一个网关的效果,用来转发消息的,这种情况下,如果你服务端都没收到消息的话,你可以自己调试看看是否两者之间的连接已经断开 或者说两者之间的数据包解包不正确导致没处理你的流程. 解决方案二: java

Socket编程 (连接,发送消息) (Tcp、Udp) - Part1

原文 http://www.cnblogs.com/zengqinglei/archive/2013/04/27/3046119.html Socket编程 (连接,发送消息) (Tcp.Udp)  本篇文章主要实现Socket在Tcp\Udp协议下相互通讯的方式.(服务器端与客户端的通讯) 1.基于Tcp协议的Socket通讯类似于B/S架构,面向连接,但不同的是服务器端可以向客户端主动推送消息. 使用Tcp协议通讯需要具备以下几个条件: (1).建立一个套接字(Socket) (2).绑定服

qt-Qt 网络编程客户端与主机连不上

问题描述 Qt 网络编程客户端与主机连不上 利用Qt编写一个客户端的界面,和开发板上的主机进行通信,现在是客户端的connect函数不能与服务器连接.Qt利用的是c的socket相关函数.通过一个线程来创建socket的 部分代码如下: socketfd = socket(AF_INET,SOCK_STREAM,0); if(socketfd < 0) { qDebug()<<"socket error"; perror("socketfd");

网络编程-sendfile发送文件的种种疑惑

问题描述 sendfile发送文件的种种疑惑 各位前辈: 如何用sendfile发送大于4g的文件! sendfile通常可以发送多大的文件,为什么3.5g的文件发不出去 解决方案 http://blog.csdn.net/amaowolf/article/details/7420234

网络编程-winpcap 发送队列发送数据包的问题

问题描述 winpcap 发送队列发送数据包的问题 我用winpcap的发送队列发送数据包,文件大小100M左右可以正常发送,抓包工具可以抓到包,但200M左右就发不了,运行黑框界面一闪而过,这是为什么,咋解决, 解决方案 WINPCAP发送自己构造的数据包问题winpcap使用:发送数据包

android-关于socket编程 客户端不能接受服务端信息问题

问题描述 关于socket编程 客户端不能接受服务端信息问题 private void send() { try { tvGetContent.append("我说:" + etSendContent.getText().toString() + "n"); writer.write(etSendContent.getText().toString() + "n"); writer.flush(); etSendContent.setText(&

谈一谈网络编程学习经验

建议大家去看原文:http://cloud.github.com/downloads/chenshuo/documents/LearningNetworkProgramming.pdf 1 谈一谈网络编程学习经验 陈硕 giantchen@gmail.com blog.csdn.net/Solstice weibo.com/giantchen 2012-02-13 本文谈一谈我在学习网络编程方面的一些个人经验."网络编程"这个术语的范围很广,本文指用 Sockets API 开发基于

Java基于Socket实现网络编程实例详解_java

一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

多线程TCP/IP网络编程

问题描述 多线程TCP/IP网络编程 编写一个socket通信程序,win32控制台的,可以发送.接收消息和文件.要多线程.C语言的. 客户端和服务端各要有怎样的思路,求指导! 目前思路大致是,服务端,两个子线程,主线程接受连接,一个子线程发送消息,一个子线程接收消息. 客户端,主线程连接,一个子线程发送消息,一个子线程接收消息. 现在有个问题,连接多个客户端后,客户端发送的消息会乱掉,服务器又怎么分辨客户端给特定的客户端发送消息. 还有,怎么传输文件. 解决方案 TCP/IP网络编程TCP/I