程序流程图:

代码演示:

服务器端:

#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网络程序的更多相关文章

  1. 建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS)

    建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS) 电话黑客android恶意软件编程黑客入侵linux 随着我们继续我们的系列,AMUNET应用程序变 ...

  2. msql_createdb: 建立一个新的 mSQL 数据库。

    mcrypt_ecb: 使用 ECB 将资料加/解密. mcrypt_get_block_size: 取得编码方式的区块大小. mcrypt_get_cipher_name: 取得编码方式的名称. m ...

  3. CODING 告诉你如何建立一个 Scrum 团队

    原文地址:https://www.atlassian.com/agile/scrum/roles 翻译君:CODING 敏杰小王子 Scrum 当中有三个角色:PO(product owner),敏捷 ...

  4. 机器学习 101 Mahout 简介 建立一个推荐引擎 使用 Mahout 实现集群 使用 Mahout 实现内容分类 结束语 下载资源

      机器学习 101 Mahout 简介 建立一个推荐引擎 使用 Mahout 实现集群 使用 Mahout 实现内容分类 结束语 下载资源 相关主题   在信息时代,公司和个人的成功越来越依赖于迅速 ...

  5. linux建立一个快捷方式,连接到另一个目录

    sudo ln -s 源目录 目标快捷方式比如你要在/etc下面建立一个叫LXBC553的快捷方式,指向/home/LXBC,那就是sudo ln -s /home/LXBC /etc/LXBC553

  6. [转]使用Scrapy建立一个网站抓取器

    英文原文:Build a Website Crawler based upon Scrapy 标签: Scrapy Python 209人收藏此文章, 我要收藏renwofei423 推荐于 11个月 ...

  7. Windows下用Codeblocks建立一个最简单的DLL动态链接库

    转自:http://blog.csdn.net/wangwei_cq/article/details/8187576 来源:http://hi.baidu.com/hellosim/item/9ae4 ...

  8. 【转】如何建立一个样式新颖的CSS3搜索框

    在线演示 搜索框大概是web开发中最常用的UI元素之一,我想基本没有必要去介绍如何使用它.无论是网站还是web应用,都会为了增强用户体验而添加它,那么你是不是也想过设计一个别致的搜索框? 在今天的文章 ...

  9. 如何建立一个完整的游戏AI

    http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...

随机推荐

  1. lumen怎么得到当前Uri的控制器、Action、路由规则

    <?php namespace App\Http\Controllers; class HelloController extends Controller { public function ...

  2. springboot-springmvc

    0依赖 <!-- jsp --> <dependency> <groupId>org.apache.tomcat.embed</groupId> < ...

  3. 【AMAD】django-oauth-toolkit -- 为Django集成Oauth2加入一些好货!

    简介 个人评分 简介 如果你面对下面其中的一个问题: 你的Django app需要暴露一个接口,你希望能够收到Oauth2协议的保护 你需要实现Oauth2鉴权服务器,让你的基础设施可以进行token ...

  4. Docker部署Nextcloud私有网盘

    对于国内某度的网盘限速行为大家有目共睹,不过对于商业化的产品模式这样也无可厚非,毕竟企业也是盈利为目的.如果想享受互联网技术带来的便利,刚好也懂一点技术的话可以尝试搭建属于私有的网盘.个人比较推荐的是 ...

  5. python 之魔法方法

    描述符就是将某种特殊类型的类的实例指派给另一个类的属性 例如下面的示例 class MyDecriptor(): def get(self,instance,owner): print("g ...

  6. 拿下id_rsa

    ssh配置公私钥远程登录Linux主机 ssh-keygen cat id_rsa.pub >>authorized_keys cat authorized_keys 拿下id_rsa h ...

  7. phpstorm设置的快捷键突然失效了,提示: IdeaVim ...

    下班后,打开PHPstorm,突然感觉不对,经常用的快捷键突然用不了. 例如按了 Ctrl+F 快捷键后,提示:  IdeaVim! Using the Ctrl+F shortcut for Vim ...

  8. selenium开发-C#/java/Python

    背景:之前由于自己有编写CefSharp.WinForms 窗体版以及 接口化 WCF+CefSharp.WinForms的网站版本,但是由于某些原因,延伸出Selenium学习与研究 总结:sele ...

  9. audio隐藏下载按钮

    // 这个方法只支持 Chrome 58+, 低于该版本的是没有无法隐藏的 <audio src="/i/horse.ogg" controls="controls ...

  10. application.properties参数详解

    # ----------------------------------------# CORE PROPERTIES# --------------------------------------- ...