VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 573|回复: 2

[求助] 各位大牛帮我看看客户端怎么就接受不到数据,求助

[复制链接]
91_avatar_middle
在线会员 发表于 2016-3-24 22:11:52 | 显示全部楼层 |阅读模式
//服务器端
#include<iostream>
#include<windows.h>
#pragma comment (lib,"ws2_32.lib")
using namespace std;

int main(void)
{
        WSADATA wsadata;
        WSAStartup(MAKEWORD(2, 2), &wsadata);

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

        SOCKADDR_IN addrSer,addrCli;
        addrSer.sin_family = AF_INET;
        addrSer.sin_port = htons(5050);
        addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

        bind(sockSer, (SOCKADDR*)&addrSer, sizeof(addrSer));

        listen(sockSer, 5);

        SOCKET sockConn;
        int len = sizeof(SOCKADDR);

        cout << "server wait..." << endl;
        sockConn = accept(sockSer, (SOCKADDR*)&addrCli,&len);
        if (sockConn == INVALID_SOCKET)
        {
                cout << "Server Accept Client Connect Fail" << endl;
                return 0;
        }
        else
        {
                cout << "Server Accept ClIent Connect success" << endl;
        }

        char sendbuf[256]="hello";
        char recvbuf[256];

       
        int s;
        s=send(sockConn, sendbuf, 20, 0);
        if(s==-1)
        {
            printf("send fail.\n");
                return 0;
        }
    printf("server send:%s\n",sendbuf);
        closesocket(sockSer);
        WSACleanup();       
        return 0;
}
//客户端
#include<iostream>
#include<Windows.h>
#pragma comment (lib,"ws2_32.lib")
using namespace std;

int main()
{
        WSADATA wsadata;
        WSAStartup(MAKEWORD(2, 2), &wsadata);

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

        SOCKADDR_IN addrSer;
        addrSer.sin_family = AF_INET;
        addrSer.sin_port = htons(5050);
        addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
       
        int res = connect(sockCli, (SOCKADDR*)&addrSer, sizeof(SOCKADDR));
        if (res != 0)
        {
                cout << "Clinet Connect Server Fail!" << endl;
                return 0;
        }
        else
        {
                cout << "Clinet Connect Server Success" << endl;
        }
       
        char sendbuf[25];
        char recvbuf[25]="h";

          int re;
          re=recv(sockCli, recvbuf, 20, 0);
          if(re ==-1)
          {
                  printf("recv fail\n");
                  return 0;
          }
          cout << "Server: >" << recvbuf << endl;
        closesocket(sockCli);
        WSACleanup();
        system("pause");
        return 0;
}




上一篇:ADO执行了Execute语句之后,返回值怎么得到?
下一篇:VC控件关联变量如何在自定义函数使用
51_avatar_middle
online_admins 发表于 2016-3-25 10:28:50 | 显示全部楼层
你的代码大问题没有,主要是服务器端在接受客户端的连接之后,马上就发送数据,之后就closesocket关闭socket了,这时候可能客户端还没来得及接收完数据,就发现远程服务器端的socket关闭了,所以就接收失败了,明白了吗
91_avatar_middle
ico_lz  楼主| 发表于 2016-3-25 14:05:43 | 显示全部楼层
Syc 发表于 2016-3-25 10:28
你的代码大问题没有,主要是服务器端在接受客户端的连接之后,马上就发送数据,之后就closesocket关闭socke ...

谢谢您的回复,可是我不太明白,代码要怎么修改呢?
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-21 13:47

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表