免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: tan1301230147
打印 上一主题 下一主题

[C++] socket服务器端接收不到数据 [复制链接]

论坛徽章:
1
双子座
日期:2013-11-14 17:43:24
11 [报告]
发表于 2014-03-24 14:02 |只看该作者
检查接收和发送的函数的: send/recv

send(s, parameter, sizeof(parameter), NULL); 不可以用sizeof。你应该计算这个缓冲区的长度(字节单位),你的例子中是非ANSI的字符,可以考虑使用WideCharToMultiByte。
recv(ClientSock, Parameter, sizeof(Parameter), NULL):不可以使用sizeof。 你必须提供一个缓冲区,包含长度。
下面的用法是错误的。
char *msg = "";
SocketRecv(80, msg);

论坛徽章:
0
12 [报告]
发表于 2014-03-24 14:09 |只看该作者
回复 10# star_in_sky


    恩 原来我居然有这么多问题 谢了 我试试

论坛徽章:
0
13 [报告]
发表于 2014-03-24 14:57 |只看该作者
回复 10# star_in_sky


    int _tmain(int argc, _TCHAR* argv[])
{
        char *msg = "";
        SocketRecv(800, msg);




        return 0;
}


/******************************************************************************
*        void SocketRecv 接收Socket数据
*        参数
*        Port 端口号双方必须保持一致
*        Type 用于标识消息类型
*        parameter 具体参数
******************************************************************************/
void SocketRecv(int Port, char Parameter[4000])
{

        WSADATA wsaData;
        WSAStartup(MAKEWORD(2, 2), &wsaData);

        SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //创建TCP套接字

        sockaddr_in sockaddr;
        sockaddr.sin_family = AF_INET;
        sockaddr.sin_addr.S_un.S_addr = INADDR_ANY;
        sockaddr.sin_port = htons(Port);

        bind(s, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR));

        listen(s, 30);

        while(true)
        {
                SOCKADDR ClientAddr;
                int nSize = sizeof(SOCKADDR);
                SOCKET ClientSock = accept(s, (SOCKADDR*)&ClientAddr, &nSize);

               
                recv(ClientSock, Parameter, strlen(Parameter), NULL);
         
                closesocket(ClientSock);


        }
        closesocket(s);

        WSACleanup();



}

int b=send(s, parameter, strlen(parameter), NULL);

客户端显示发送成功但服务端代码收不到数据 看了下直接\n就没了

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
14 [报告]
发表于 2014-03-24 15:43 |只看该作者
回复 1# tan1301230147


    你在send之后加个sleep,send只保证数据从用户缓冲区copy到内核的网络缓冲区成功并不代表发送一定网络上了,在还没有发送的时候你直接close socket,导致这个数据根本没有发到网络上就被关闭了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP