程序流程:

上图中,左边是server端的,右边是client端的C++程序流程

上图中,左边是server端的,右边是client端的C++程序流程

C++函数解释

根据上面的流程图,下面按步骤解释一下用程序怎么实现的,当然由于TCP 、UDP的C++源码量较大且相似度较高,所以下面只附上TCP serve的源代码并着重列出它们之间的差异:

makeword(2,2);//创建一个无符号的16位整数。
WASStartup();//异步套接字的启动函数,用于初始化套接字。
//字符数组 sendData[]:用于记录发送的次数。
socket();//原型是int socket (int domain, int type, int protocol)。用于初始化创建socket对象,成功时,返回非负数的socket描述符;失败是返回-1。
bind();//函数原型为int bind(int sockfd, const struct sockaddr* myaddr, socklen_t addrlen)。将创建的socket绑定到指定的IP地址和端口上,通常是第二个调用的socket接口。返回值:0成功,-1则出
listen();//原型为int listen(int sockfd, int backlog),listen()函数仅被TCP类型的服务器程序调用,实现监听服务,该函数的第一个参数为socket类的一个对象,第二个参数规定了套接字的连接个数。listen()成功时返回0,错误时返回-1。
accept();//原型为 int accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen)。该函数仅被TCP类型的服务器程序调用,从已完成连接队列返回下一个建立成功的连接,如果已完成连接队列为空,线程进入阻塞态睡眠状态。成功时返回套接字描述符,错误时返回-1。
connetct();//原型为int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)。TCP特有,用来与服务器建立一个TCP连接,实际是发起3次握手过程,连接成功返回0,连接失败返回1。
send();//原型为int send(int sockfd, const void *msg, int len, int flags)。TCP类型的数据发送。
recv();//原型为int recv(int sockfd, void *buf, int len, unsigned int flags)。TCP类型的数据接收。
sendto();//原型为int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *dst_addr, int addrlen)。用于非可靠连接(UDP)的数据发送,因为UDP方式未建立连接socket,因此需要制定目的协议地址。
recvfrom();//原型int recvfrom(int sockfd,void *buf, size_t len, int flags, struct sockaddr *src_addr, int*fromlen)用于非可靠连接(UDP)的数据接收。
losesocket();//关闭socket。

C++源码示例:

#include <stdio.h>
#include <winsock2.h> //包含socket类的头文件
#include<stdlib.h>
#include<time.h>  #pragma comment(lib,"ws2_32.lib")int main(int argc, char* argv[])
{//初始化WSAWORD sockVersion = MAKEWORD(2, 2);WSADATA wsaData;int f = 1, mode = 0;int ret = -1;char sendData[] = "Times:0000\n";if (WSAStartup(sockVersion, &wsaData) != 0){return 0;}//创建套接字SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (slisten == INVALID_SOCKET){printf("socket error !");return 0;}//绑定IP和端口sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8235);sin.sin_addr.S_un.S_addr = INADDR_ANY;if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR){printf("bind error !\n");}//开始监听if (listen(slisten, 5) == SOCKET_ERROR){printf("listen error !\n");return 0;}//循环接收数据SOCKET sClient;sockaddr_in remoteAddr;int nAddrlen = sizeof(remoteAddr);char revData[255];while (f){system("cls");fflush(stdin);printf("Wait...\n");sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);if (sClient == INVALID_SOCKET){printf("accept error !");continue;}else{printf("Received a Response from: %s \r\n", inet_ntoa(remoteAddr.sin_addr));printf("Send(1) or Receive(0)?\n");scanf("%d", &mode);if (mode){send(sClient, sendData, strlen(sendData), 0);sendData[9]++;if (sendData[9] == ':'){sendData[9] = '0';sendData[8] += 1;}}else{ret = recv(sClient, revData, 255, 0);if (ret > 0){revData[ret] = '\0';printf(revData);printf("\n");}revData[0] = '\0';closesocket(sClient);}}printf("Continue or Quit(0)\n");scanf("%d", &f);}closesocket(slisten);WSACleanup();return 0;
}

程序运行现象

同样地,仍以TCP Server 为例:

接收字符串示例

发送字符串示例

注意:上面的程序可以在同一台计算机上完成(正常的话需要两台计算机),不过需要一个小工具辅助完成字符串互发并展示,该工具名为“sokit.exe”,如果需要的话,大家可以关注微信公众号“24K纯学渣”,回复“CS网络通讯”,即可获取4套(TCP-Server,TCP-Client,UDP-Server,UDP-Client)完整的C++ VS工程和小工具"sokit.exe"。

C/S模式的计算机网络通讯相关推荐

  1. 用ACE的Reactor模式实现网络通讯的例子

    用ACE的Reactor模式实现网络通讯的例子,不罗嗦,直接上代码. 服务器代码: [cpp] view plain copy #include <ace/Reactor.h> #incl ...

  2. bs模式Java web,基于BS模式的即时通讯系统的设计与实现(MyEclipse)

    基于BS模式的即时通讯系统的设计与实现(MyEclipse)(包含选题审批表,任务书,开题报告,中期检查表,毕业论文13000字,答辩记录,成绩评定册,源程序) 摘  要:即时通讯(Instant M ...

  3. 计算机网络 故障处理,计算机网络通讯技术故障分析与处理

    摘 要:计算机的功能非常强大,而且操作较为简便,其优良的特性在人们的生活中得到了广泛的使用.通讯功能是计算机一项重要的功能,其可以实现人们远距离的交流与沟通,拉近距离.促进感情,在信息技术飞速发展的今 ...

  4. 计算机网络通讯传输的是,计算机网络通信系统是(计算机网络通信系统是)

    计算机网络通信系统是(计算机网络通信系统是)1.计算机网络系统是由通信子网和资源子网组成. 通信子网:一个计算机网络中实现网络通信功能的设备及其软件的集合.资源子网:网络中实现资源共享功能的设备及其软 ...

  5. 计算机网络技术发展模式研究,计算机网络技术的发展模式研究

    网络与通信 N e t w o r k&C o mmu n i c a t i o n 计算机网络技术的发展模式研究 文/李祥龙 研究.探索.试验以及考证,也伴随着新兴技 2计算机网络技术快速 ...

  6. 湎计算机网络通讯设备有哪些,2018年4月自考计算机网络原理04741试题及答案

    <2018年4月自考计算机网络原理04741试题及答案>由会员分享,可在线阅读,更多相关<2018年4月自考计算机网络原理04741试题及答案(9页珍藏版)>请在人人文库网上搜 ...

  7. 湎计算机网络通讯设备有哪些,计算机网络习题集及答案.pdf

    计算机网络习题集及答案 怀 挝 硷 妈 融 茧 蚀 忿 葫 敌 茨 渔 殴 鸥 暂 掏 嗣 息 塞 伍 部 有 剿 厅 喧 额 欲 仰 激 栅 淮 妖 语 醇 腊 奔 访 领 门 咯 浦 聋 悯 其 ...

  8. 天津大学计算机报告模式,天津大学计算机网络实验报告.pdf

    天津大学计算机网络实验报告 计算机通信与网络课程报告 学 院 专 业 年 级 姓 名 学 号 年 月 日 基于Routersim 的路由器与交换机网络配置实验 1. 题目要求 在Routersim 仿 ...

  9. 计算机网络专业教学模式,《计算机网络》按专业分类教学模式研究

    [摘要]计算机网络是应用性很强的一门课程,为学生后续课程的学习以及今后的工作奠定坚实的网络基础.本文分析了目前计算机网络课程教学中存在的问题,提出按专业分类教学的解决方法. [关键词]计算机网络:教学 ...

最新文章

  1. no.7_qzhai 开心版_传世霸业超变版下载-传世霸业超变版手机版下载v1.0
  2. mysql 5.7 flashback_Flashback for MySQL 5.7
  3. fiddler4使用教程
  4. 2019人工智能写作软件
  5. 人工智能是一个骗局?
  6. 互联网大佬“舌战”996:马云、刘强东、周鸿祎、张朝阳、李国庆,你站谁?
  7. Maya---2018up4 Python 开发环境配置(win10x64)
  8. Python:实现Zip格式的文件压缩
  9. 【错误记录】Android 编译报错 ( Installed Build Tools revision 31.0.0 is corrupted. Remove and install again )
  10. SIGAR - System Information Gatherer And Reporter
  11. 算法与数据结构课后习题第七章
  12. 【pwnable.kr】horcruxes - 伏地魔的7个魂器 gets栈溢出 截断 atoi转化
  13. win10资源管理器拖拽文件卡死无响应
  14. 垃圾分类共享网站的设计与实现(SSM)
  15. MacPorts使用
  16. Android android_id, deviceId, oaid的区别
  17. 中国企业网盘保持高速增长 联想份额占四成
  18. DL:卷积神经网络(CNN)的一些学习网址
  19. 如何批量设置 Word 文档的限制编辑?
  20. 【附源码】计算机毕业设计java养老院管理信息系统设计与实现

热门文章

  1. Spring Boot整合SSM
  2. ps -ef |grep cqs
  3. 中维世纪视频汇聚,为百路以上项目提供一站式视频集中管理服务
  4. 论人工智能机器人应具备的社会价值
  5. 国产ARM与低成本FPGA高速通信的3种方案,基于全志T3/A40i
  6. linux 虚拟终端软件下载,Linux Mint 20中安装最快的终端模拟器Alacritty
  7. python快速排序,从小到大
  8. 桥接模式详解(都市异能版)
  9. 第四届中国(深圳)中医健康管理高峰论坛暨中医适宜技术成功举办
  10. Kafka 原理详解