建立一个能持续处理的C/S网络程序
程序流程图:
代码演示:
服务器端:
#include<WinSock2.h>
#include<Windows.h>
#include<stdio.h>
#include<iostream> #pragma comment(lib,"ws2_32.lib") int main()
{
WORD ver = MAKEWORD(, );
WSADATA dat;
//WinSocket启动
WSAStartup(ver, &dat); //1、建立一个socket
SOCKET _sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //AF_INET创建一个IPV4的套接字,SOCK_STREAM面向数据流的,IPPROTO_TCP TCP
if (INVALID_SOCKET == _sock)
{
printf("ERROR:建立失败!\n");
}
//2.绑定
sockaddr_in _sin = {}; //创建网络地址
_sin.sin_family = AF_INET;
_sin.sin_port = htons(); //Host to Network Short
_sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); // IP地址
if (bind(_sock, (sockaddr *)&_sin, sizeof(_sin)) == SOCKET_ERROR)
{
printf("ERROR:绑定失败!\n");
}
else
{
printf("TRUE:绑定成功!\n");
}
//3.监听网络端口
if (listen(_sock, ) == SOCKET_ERROR)//第二个参数为最大等待多少人可以同时连接
{
printf("ERROR:监听失败!\n");
}
else
{
printf("TRUE:监听成功!\n");
}
//4.等待接收客户端连接
sockaddr_in clientAddr = {};
int nAddrLen = sizeof(sockaddr_in);
SOCKET _cSOCK = INVALID_SOCKET; _cSOCK = accept(_sock, (sockaddr *)&clientAddr, &nAddrLen);
if (_cSOCK == INVALID_SOCKET)
{
printf("ERROR:无效客户端SOCKET!\n");
}
printf("新客户端加入:Socket=%d,IP = %s\n",(int)_cSOCK, inet_ntoa(clientAddr.sin_addr));//inet_ntoa(clientAddr.sin_addr)将接收到的IP地址转化为字符串
char _recvBuff[] = {};
while ()
{
//5.接收客户端新数据
int nLen = recv(_cSOCK, _recvBuff, , );
if (nLen <= )
{
printf("客户端已退出!任务结束!");
break;
}
printf("收到命令:%s\n",_recvBuff);
//6.请求处理
if ( == strcmp(_recvBuff, "getName"))
{
//7.向客户端发送一条数据
char msgBuff[] = "Xiao Qiang\n";
send(_cSOCK, msgBuff, strlen(msgBuff) + , );
}
else if ( == strcmp(_recvBuff, "getAge"))
{
//7.向客户端发送一条数据
char msgBuff[] = "80\n";
send(_cSOCK, msgBuff, strlen(msgBuff) + , );
}
else{
//7.向客户端发送一条数据
char msgBuff[] = "???.\n";
send(_cSOCK, msgBuff, strlen(msgBuff) + , );
} } //8.关闭自身的socket
closesocket(_sock); //WinSocket关闭
WSACleanup(); system("pause");
return ;
}
客户端:
#include<WinSock2.h>
#include<Windows.h>
#include<stdio.h> #pragma comment(lib,"ws2_32.lib") int main()
{
WORD ver = MAKEWORD(, );
WSADATA dat;
WSAStartup(ver, &dat); //1.建立一个socket
SOCKET _sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == _sock)
{
printf("ERROR:建立失败!\n");
}
//2.连接服务器
sockaddr_in _sin = {}; //创建网络地址
_sin.sin_family = AF_INET;
_sin.sin_port = htons(); //Host to Network Short
_sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//inet_addr("127.0.0.1"); // IP地址
int ret = connect(_sock, (sockaddr *)&_sin, sizeof(sockaddr_in));
if (SOCKET_ERROR == ret)
{
printf("ERROR:连接失败!\n");
}
else
{
printf("连接成功!\n");
} while (true)
{
//3.输入请求命令
char cmdBuff[] = {};
scanf("%s", cmdBuff);
//4.处理请求命令
if ( == strcmp(cmdBuff, "exit"))
{
printf("收到exit命令,已退出1");
break;
}
else{
//5.向服务器发送请求命令
send(_sock, cmdBuff, strlen(cmdBuff) + , );
}
//6.接收服务器信息
char recvBuff[] = {};
int nlen = recv(_sock, recvBuff, , );
if (nlen <= )
{
printf("ERROR:接收失败!\n");
}
else
{
printf("接收到数据:%s\n", recvBuff);
}
} //7.关闭套接字
closesocket(_sock); //WinSocket启动
WSAStartup(ver, &dat); //WinSocket关闭
WSACleanup();
printf("已退出!");
getchar();
return ;
}
建立一个能持续处理的C/S网络程序的更多相关文章
- 建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS)
建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS) 电话黑客android恶意软件编程黑客入侵linux 随着我们继续我们的系列,AMUNET应用程序变 ...
- msql_createdb: 建立一个新的 mSQL 数据库。
mcrypt_ecb: 使用 ECB 将资料加/解密. mcrypt_get_block_size: 取得编码方式的区块大小. mcrypt_get_cipher_name: 取得编码方式的名称. m ...
- CODING 告诉你如何建立一个 Scrum 团队
原文地址:https://www.atlassian.com/agile/scrum/roles 翻译君:CODING 敏杰小王子 Scrum 当中有三个角色:PO(product owner),敏捷 ...
- 机器学习 101 Mahout 简介 建立一个推荐引擎 使用 Mahout 实现集群 使用 Mahout 实现内容分类 结束语 下载资源
机器学习 101 Mahout 简介 建立一个推荐引擎 使用 Mahout 实现集群 使用 Mahout 实现内容分类 结束语 下载资源 相关主题 在信息时代,公司和个人的成功越来越依赖于迅速 ...
- linux建立一个快捷方式,连接到另一个目录
sudo ln -s 源目录 目标快捷方式比如你要在/etc下面建立一个叫LXBC553的快捷方式,指向/home/LXBC,那就是sudo ln -s /home/LXBC /etc/LXBC553
- [转]使用Scrapy建立一个网站抓取器
英文原文:Build a Website Crawler based upon Scrapy 标签: Scrapy Python 209人收藏此文章, 我要收藏renwofei423 推荐于 11个月 ...
- Windows下用Codeblocks建立一个最简单的DLL动态链接库
转自:http://blog.csdn.net/wangwei_cq/article/details/8187576 来源:http://hi.baidu.com/hellosim/item/9ae4 ...
- 【转】如何建立一个样式新颖的CSS3搜索框
在线演示 搜索框大概是web开发中最常用的UI元素之一,我想基本没有必要去介绍如何使用它.无论是网站还是web应用,都会为了增强用户体验而添加它,那么你是不是也想过设计一个别致的搜索框? 在今天的文章 ...
- 如何建立一个完整的游戏AI
http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...
随机推荐
- Springboot入门5-项目打包部署(转载)
前言 本文主要介绍SpringBoot的一些打包事项和项目部署以及在其中遇到一些问题的解决方案. SpringBoot打包 在SpringBoot打包这块,我们就用之前的一个web项目来进行打包.首先 ...
- RocketMQ之十:RocketMQ消息接收源码
1. 简介 1.1.接收消息 RebalanceService:均衡消息队列服务,负责通过MQClientInstance分配当前 Consumer 可消费的消息队列( MessageQueue ). ...
- Win10编译Mingw
准备工具 Windows平台 cmake mingw-x64 Linux平台(Ubuntu) sudo apt-get install git cmake cmake-gui -y 下载源码 建议直接 ...
- Django-DRF(视图相关)
drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. Django REST ...
- pramfs安装
1. 拷贝 linux-3.11 pramfs-1.5.0-3.11 pramfs-Tools 到电脑中(我是新建目录linux中) 2.解压 3.cd pramfs-1.5.0-3.11/ 4.将p ...
- 基于SpringBoot从零构建博客网站 - 整合ehcache和开发注册登录功能
对于程序中一些字典信息.配置信息应该在程序启动时加载到缓存中,用时先到缓存中取,如果没有命中,再到数据库中获取同时放到缓存中,这样做可以减轻数据库层的压力.目前暂时先整合ehcache缓存,同时预留了 ...
- [转帖]SSH原理与运用(二):远程操作与端口转发
SSH原理与运用(二):远程操作与端口转发 http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html 接着前一次的文章,继续介绍S ...
- github与pycharm
再也不要使用命令行了 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
- Web循环监控Java调用 / Java调用.net wcf接口
背景介紹 (Background Introduction) 目前有一些报表客户抱怨打不开 报表执行过程过长,5.8.10秒甚至更多 不能及时发现和掌握服务器web站点情况 用戶需求(User Req ...
- 深入应用C++ 11 C2
template<typename T> void print(T& t) { cout << "lvalue" << endl; } ...