首页 > 分享 > 基于c++的C/S网络通信 从入门到精通(二)

基于c++的C/S网络通信 从入门到精通(二)

最新推荐文章于 2019-04-29 20:27:31 发布

芯钰 于 2018-08-10 16:35:06 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

上一节我们只是是实现了最简单的C/S模型,也是最为理想的连接方式,但是如果没连接上又该如何呢??

我们需要给他加上一些判断条件,以防止崩溃!!!

修改后如下:

                    客户端代码

#include <iostream>

#include <winsock2.h>

#pragma comment (lib,"WS2_32.lib")

using namespace std;

int main()

{

//加载套接字库

WSADATA wsadata;

int iRet=WSAStartup(MAKEWORD(2, 2), &wsadata);

if (iRet != 0)

{

cout << "套接字库加载失败" << endl;

return -1;

}

else

{

cout << "套接字库加载成功" << endl;

}

//创建套接字

SOCKET clientsocket;

clientsocket = socket(AF_INET, SOCK_STREAM, 0);

if (clientsocket == INVALID_SOCKET)

{

cout << "套接字创建失败" << endl;

return -1;

}

else

{

cout << "套接字创建成功" << endl;

}

//初始化客户端地址族变量

SOCKADDR_IN addrSrv;

addrSrv.sin_family = AF_INET;

addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

addrSrv.sin_port = htons(8000);

//连接

iRet=connect(clientsocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

if (iRet == SOCKET_ERROR)

{

cout << "连接失败" << endl;

return -1;

}

else

{

cout << "连接成功" << endl;

}

//发送数据

while (true)

{

char sendBuff[255];

cin >> sendBuff;

send(clientsocket, sendBuff, 255, 0);

}

}

                                服务器代码:

#include <iostream>

#include <winsock2.h>

#pragma comment (lib,"WS2_32.lib")

using namespace std;

int main()

{

//加载套接字库

WSADATA wsadata;

int iRet=WSAStartup(MAKEWORD(2, 2), &wsadata);

if (iRet != 0)

{

cout << "套接字库加载失败" << endl;

return -1;

}

//创建套接字

SOCKET serversocket;

serversocket = socket(AF_INET, SOCK_STREAM, 0);

if (serversocket == INVALID_SOCKET)

{

cout << "套接字创建失败" << endl;

return -1;

}

else

{

cout << "套接字创建成功" << endl;

}

//初始化服务器地址族变量

SOCKADDR_IN addrSrv;

addrSrv.sin_family = AF_INET;

addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

addrSrv.sin_port = htons(8000);

//绑定

iRet = bind(serversocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

if (iRet == SOCKET_ERROR)

{

cout << "绑定失败" << endl;

return -1;

}

else

{

cout << "绑定成功" << endl;

}

//监听

iRet = listen(serversocket, 10);

if (iRet == SOCKET_ERROR)

{

cout << "开启监听失败" << endl;

return -1;

}

else

{

cout << "开启监听成功" << endl;

}

//接收连接

SOCKADDR_IN addrClient;

int len = sizeof(SOCKADDR);

SOCKET connectSocket=accept(serversocket, (SOCKADDR*)&addrClient, &len);

if (INVALID_SOCKET == connectSocket)

{

cout << "接受连接失败" << endl;

return -1;

}

else

{

cout << "接受连接成功" << endl;

}

//接收数据

while (true)

{

char recvBuff[255];

int iRet = recv(connectSocket, recvBuff, 255, 0);

if (iRet <= 0)

{

cout << "客户端关闭连接" << endl;

return -1;

}

cout << recvBuff << endl;

}

}

思考:如何实现客户端和服务器相互收发数据呢?

相关知识

家庭养花从入门到精通
建筑●室内●景观设计SketchUp 8从入门到精通
物业园林绿化养护管理从入门到精通
园艺联盟app:花卉养护,从入门到精通
园林绿化养护与管理从入门到精通(32页)
《家庭养花从入门到精通》(赵庚义)【简介
AI 全知道:从入门到精通,开启智能新时代
时尚手作花饰:从入门到精通【全本
观叶花卉养护从入门到精通编辑推荐
园艺秘籍,从入门到精通的养花技巧全解析

网址: 基于c++的C/S网络通信 从入门到精通(二) https://m.huajiangbk.com/newsview742162.html

所属分类:花卉
上一篇: 花了一年时间开发的TTF2FNT
下一篇: 如何用Python绘制简单花朵图