| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 527 人关注过本帖
标题:为什么无论发送多少长度的数据,者能接收前四位呢?
只看楼主 加入收藏
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:5 
为什么无论发送多少长度的数据,者能接收前四位呢?
程序代码:
// : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "WinSock2.h"

#define MAX_BUFFER 100

int _tmain(int argc, _TCHAR* argv[])
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int len;
    SOCKADDR_IN sockSerAddr,sockClientAddr;
    char *sendbuf,*recvbuf;

    wVersionRequested=MAKEWORD(2,2);
    if(0!=WSAStartup(wVersionRequested,&wsaData))
    {
        printf("faile to connect!\n");
        return 0;
    }
    if(HIBYTE(wsaData.wVersion)!=2||LOBYTE(wsaData.wVersion)!=2)
    {
        WSACleanup();
        return 0;
    }

    SOCKET sockSer=socket(AF_INET,SOCK_STREAM,0);

    sockSerAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    sockSerAddr.sin_family=AF_INET;
    sockSerAddr.sin_port=htons(3000);

    if(SOCKET_ERROR==bind(sockSer,(LPSOCKADDR)&sockSerAddr,sizeof(sockaddr_in)))
    {
        printf("faile to bind!\n");
        return 0;
    }
    if(listen(sockSer,5) ==SOCKET_ERROR)
    { 
        printf("Listen failed:%d\n", WSAGetLastError()); 
        return 0; 
    } 
    len=sizeof(sockaddr);
    sendbuf=(char*)malloc(MAX_BUFFER*sizeof(char));
    recvbuf=(char*)malloc(MAX_BUFFER*sizeof(char));
    sendbuf="welcome to china !";
    while(1)
    {
        SOCKET sockconnet=accept(sockSer,(sockaddr*)&sockClientAddr,&len);
        if(sockconnet== SOCKET_ERROR)
        { 
            printf("Accept failed:%d", WSAGetLastError()); 
            break; 
        }
        printf("sockClient IP is: %s\n",inet_ntoa(sockClientAddr.sin_addr));

        int len1=send(sockconnet,sendbuf,strlen(sendbuf)+1,0);
        if(SOCKET_ERROR==len1)
        {
            printf("send failed!\n");
            break;
        }
        else
            printf("发送的数据长度是:%d\n",len1);

        memset(recvbuf,'\0',sizeof(recvbuf));
        int len2=recv(sockconnet,recvbuf,sizeof(recvbuf),0);
        if(SOCKET_ERROR==len2)
        {   
            printf("receive error!\n");
            break;
        }
        else
            printf("接收的数据长度是:%d\n接收的数据是%s\n",len2,recvbuf);

        closesocket(sockconnet);
    }
    closesocket(sockSer);
    WSACleanup();
    system("pause");
    return 0;
}


这是客服程序
程序代码:
//  : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "WinSock2.h"

#define MAX_BUFFER 100

int _tmain(int argc, _TCHAR* argv[])
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int result;
    SOCKADDR_IN sockSer;
    char *sendbuf,*recvbuf;

    wVersionRequested=MAKEWORD(2,2);
    if(0!=WSAStartup(wVersionRequested,&wsaData))
    { 
        printf("failed to load WinSock!\n");
        return 0;
    }
    if(HIBYTE(wsaData.wVersion)!=2||LOBYTE(wsaData.wVersion)!=2)
    {
        printf("Version Wrong!\n");
        WSACleanup();
        return 0;
    }

    SOCKET socketClient=socket(AF_INET,SOCK_STREAM,0);
    if(SOCKET_ERROR == socketClient)
    { 
        printf("Socket() error1:%d\n", WSAGetLastError()); 
        return 0; 
    }  

    sockSer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    sockSer.sin_family=AF_INET;
    sockSer.sin_port=htons(3000);

    recvbuf=(char*)malloc(MAX_BUFFER*sizeof(char));
    sendbuf=(char*)malloc(MAX_BUFFER*sizeof(char));
    sendbuf="thank you very much !";

    if(connect(socketClient,(LPSOCKADDR)&sockSer,sizeof(sockaddr_in)))
    {
        printf("Socket() error2:%d\n", WSAGetLastError()); 
        return 0;
    }
    else
    {
        memset(recvbuf,'\0',sizeof(recvbuf));
        int len1=recv(socketClient,recvbuf,sizeof(recvbuf),0);
        if(SOCKET_ERROR==len1)
            printf("receive error!\n");
        else
             printf("接收到的数据长度是:%d\n收到的数据是:%s\n",len1,recvbuf);
        int len2=send(socketClient,sendbuf,strlen(sendbuf)+1,0);
        if(SOCKET_ERROR==len2)
            printf("send error!\n");
        else
            printf("发送的长度是:%d\n",len2);
    }
    closesocket(socketClient);
    WSACleanup();

    return 0;
}


搜索更多相关主题的帖子: 应用程序 控制台 
2015-05-17 18:28
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
自顶!   坐等大神!
2015-05-18 08:45
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:20 
问题太多了。
先查查sizeof是怎么用的?sizeof(指针)等于多少?
两段代码中都有,用printf把sizeof(recvbuf)的结果打印出来看看等于多少!
memset(recvbuf,'\0',sizeof(recvbuf));
int len2=recv(sockconnet,recvbuf,sizeof(recvbuf),0);

memset(recvbuf,'\0',sizeof(recvbuf));
int len1=recv(socketClient,recvbuf,sizeof(recvbuf),0);

总有那身价贱的人给作业贴回复完整的代码
2015-05-18 09:35
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 3楼 embed_xuel
谢谢您 ,我明白了 这求的是指针变量的长度,而不是数组的长度
2015-05-18 12:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 4楼 风车转风车89
自己多想想为什么自己没发现?通过调试手段能不能发现原因?

总有那身价贱的人给作业贴回复完整的代码
2015-05-18 12:42
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 5楼 embed_xuel
  谢谢您的指导,自己太想当然了没有注意到太傻了, 非常感谢!
2015-05-18 16:55
快速回复:为什么无论发送多少长度的数据,者能接收前四位呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017991 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved