当前位置: 首页 > news >正文

免费发布推广信息网站wordpress企业主题 下载

免费发布推广信息网站,wordpress企业主题 下载,wordpress图片主题下载失败,物联网项目设计方案学完C语言做不出东西#xff1f;不存在的#xff0c;咱们做一个最“隐私”的聊天器#xff0c;就俩人#xff0c;你和我。咱们聊天的信息你知我知没别人知。 对了#xff0c;本文评论区点赞、收藏抽奖。 社区也有抽奖#xff0c;本周社区抽奖帖子 #xff1a;https://b…学完C语言做不出东西不存在的咱们做一个最“隐私”的聊天器就俩人你和我。咱们聊天的信息你知我知没别人知。 对了本文评论区点赞、收藏抽奖。 社区也有抽奖本周社区抽奖帖子 https://bbs.csdn.net/topics/603458199 以上两个抽奖都是周日开奖名额十个然后书、日历等奖品都有。. 没学过C语言的觉得难的看这里https://blog.csdn.net/a757291228/category_11468001.html 我们直接开始写代码只要你会基础的C语言不要担心看不懂不懂的我帮你刨根问底把根都挖出来嚼烂绝对懂。 一、一个聊天软件的基础模型是怎么样的 你是个新手的话你可能就会问什么是模型听不懂我在骗你学习。放心我现在就告诉你什么是基础“模型”。 我们可以简单的理解“模型”指这个聊天软件基本是怎么进行通信的常规形式是怎样的只要清楚了这个形式流程然后在这个流程中添加一些代码就ok了啥都不用想。如果你还是不懂什么是“流程”那我就跟你说这个是一个步骤只需要懂这个步骤我们使用代码编写这个步骤就可以完成了。 好了现在没啥问题了吧现在开始第一步在一个通信中一般有一个服务端。那什么是服务端 1.1 什么是服务端 服务端就简单了曾经…曾经…你去例如移动或者联通的营业挺客服小姐姐就会对你提供服务例如业务办理办个卡销个号等那我们的服务端是用来通信的所以这个服务端就是指等待跟我聊天的人只要你上线了开电脑打开软件了连接上我的服务端了咱们就可以聊天了。 服务端一般就是一直在这里等你上线的那个风里雨里我在这里等你。 1.2 又不懂什么是客户端了 不懂没关系打游戏懂吧你下载到你电脑你手机的就是客户端你打个游戏如果没有服务端就不能跟人匹配这个懂了吧 1.3 基本的工具要拿过来吧 还知道头文件吧 头文件就等于是一个工具箱需要干啥就可以使用拿头文件过来这样就可以用里面的工具了。 那咱们做一个聊天的软件就需要一个工具箱吧这个工具箱叫做“winsock2.h”那怎么拿呢都知道#include 吧 那就直接把这个头文件拿过来就好了代码就可以写成#includewinsock2.h。 常规的输入输出工具箱也要拿吧所以就第一步把 stdio.h 也拿过来所以这个服务端的第一行第二行代码就写成 #includestdio.h #includeWinSock2.h1.4 开始 socket 编程 不会了不会了是不是一说 socket 你就说这是个什么鬼 我先说一句让你懵逼的定义“socket 就是应用之间通信的端点”。懂不懂 不懂呀那我继续说。 socket 就是两个通信软件之间的接口你可以当成服务端是“插座”客户端是“插头”一插欧了这样不就通电了这样说你明白了吧 当然这样解释比较片面但用“抽象”的方式讲又不一定能让大家听得懂所以你就理解成插头肯定没问题。 1.5 开始抬杠我拿三座插两座插不进 咱们用的插头都是有标准的你想想没有标准怎么那么多电器都可以用常规的插头 像这个 socket 这个通信端口是有基于一些标准的。例如 TCP/IP这些通信协议。 好了我说了TCP/IP可能就会有同学问这又是什么鬼没关系你只需要知道这个是一个通信协议咱们现在是用 socket 进行通信就好知道 socket 怎么用就行协议咱们可不需要现在搞懂咱们只需要知道 socket 如何运用即可。 二、开始敲服务端代码 2.1 搞清楚使用 socket 进行通信的步骤 编写C语言Windows下的socket需要经过几个步骤首先对WSAStartup 进行初始化初始化对socket 套接字socket也叫套接字进行创建随后配合绑定信息接着进行配置信息的bind 绑定绑定了信息后通过该信息进行isten 监听监听后若有链接则connect 连接再接下来开始使用accept 接收请求得到请求后可以选择接受recv或者send发送数据最后closesocket 关闭 socketWSACleanup 最终关闭。 简单点就是下面的这个流程 不懂了不懂就慢慢来嘛。 这是进行 socket 编程的步骤如果你要问为什么要这样做…我只能回答你规定的流程就这样因为你要进行通信那肯定需要创建一个 socket 创建完毕后那么肯定要绑定你要通信的信息如果你不绑定你怎么知道你要跟谁说话呢急着我收到了一个信息后就等于跟我请求通话我同意了咱们就开始通信了通信肯定要发送信息那就用send这些方法发送了最后面说完话我就关闭这个 socket了那你说不是吗 还不懂那你看下面。 2.1 第一步初始化 既然第一步是初始化那我要初始化什么东西 我们需要初始化一个 WSADATA 类型数据的对象。 什么鬼又是 WSADATA 又是对象的听不懂啊 没关系的拉WSADATA 其实就是一个结构体咱们在把使用socket的工具箱 WinSock2 拿过来的时候这个 WSADATA 结构体就已经创建好了直接使用这个结构体创建一个结构体变量就好了。 WSADATA 的作用就是用来存储初始化信息的就像你打个游戏初始化创建一个人这个人总得有信息吧光头、小眼睛、腿短…对吧 那么我们的代码就可以写成以下 #includestdio.h #includeWinSock2.h #include stdlib.h int main(){WSADATA wsaData; }接下来就可以开始初始化了初始化 socket 有一个函数叫做 WSAStartup既然是函数一般都有参数吧参数有哪些呢 这个 WSAStartup 方法需要传入一个 版本号还有一个用于存储信息的 WSADATA 结构体。现在我们已经知道 WSADATA 的结构体就是上面这个代码创建的 wsaData 结构体变量那么版本号又是什么 这个版本号是说明我们使用哪个 Winsock 版本Winsock 有一个 1.1 版本还有一个 2.2 版本。两个版本有不同1.1 版本只支持 TCP/IP 协议还有一个版本 2.2 支持多个协议这个时候你懂用哪个了吧 什么 还不懂 那肯定是全都要呀 2.2 版本兼容性之类的更好兼容啥我们不管反正用多的。 那直接写成 WSAStartup(2, 2, wsaData) 不不不我们写法有一些不同需要用一个函数 MAKEWORD 对版本进行生成就像这样 WSAStartup(MAKEWORD(2, 2), wsadata);规定咱们使用 MAKEWORD 告诉 WSAStartup 初始化调用什么版本。 那么整个初始化的代码就如下所示咯 #includestdio.h #includeWinSock2.h #include stdlib.h int main(){WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), wsadata); }什么不懂 wsadata 来来来我们的漫画同学告诉你是啥意思 懂了吧传个地址方便信息存储。 2.2 第二步创建 socket 这一步超级简单代码就是这个: SOCKET serverSock socket(PF_INET, SOCK_STREAM, 0);我知道你要骂我写什么是什么鬼。 好了好了首先 SOCKET 是一个socket的类型还记得 int a 吧int 是一个类型那么 SOCKET 肯定就是一个类型了说明创建一个 SOCKET 类型的变量然后 socket() 是创建 socket 的函数这个没毛病吧 你说是里面的参数不懂 小问题了第一个 PF_INET 就表示指定 IPV4 也就是说先给个网络协议那么多的网络协议你总要选一个吧。那为什么要用 IPv4 呢我只能说用这个东西计算更快毕竟咱们做个聊天软件是局域网通信你就理解为咱们做的东西是个“小东西”没必要那么大“体量”迷你更好用那就用那个 IPV4 了你想不开你也可以用 IPV6 试试。 那 SOCK_STREAM 是什么SOCK_STREAM 表示咱们进行的通信是 TCP 通信稳定可靠。在这里使用 SOCK_STREAM 也表示向我们的系统或者你理解成“计算机”申请一个通信的端口不然系统不给你“开个口子”我的数据怎么传出去对吧不然就是叫破喉咙都没人理我。 那最后一个参数 0 又是什么呢 这里就是一个编号说仔细点这个是 socket 所使用的传输协议编号是不是不明白其实这就是一个编号不做设置但是要给一个值所以就给一个 0 咯。 2.3 第三步绑定信息 绑定信息这一步就有点玄了。在这里咱们要了解两个结构体一个是 sockaddr_in还有一个是 SOCKADDR。需要注意的是这两个结构体包含的数据都是一样的是一样的… 主要是使用上有区别。有啥区别 sockaddr 是个系统用而 sockaddr 是用来强制转换 sockaddr_in 结构体给系统调用的函数用。是不是迷茫不要迷茫一般都是这样做那就这样做吧。你只需要记住sockaddr 保存信息然后就别管了而sockaddr 咱们就用来给参数给函数用。 在 socket 中咱们使用 sockaddr_in 结构体绑定监听的 IP 信息首先需要创建这个结构体 struct sockaddr_in sockAddr;接下来始绑定端口、IP类型其中 127.0.0.1 表示本机、1234 表示监听端口 sockAddr.sin_family PF_INET; //IPv4 sockAddr.sin_addr.s_addr inet_addr(127.0.0.1); //服务器的IP sockAddr.sin_port htons(1234); //端口这个懂没懂 sockAddr.sin_family 是表示这个结构体中用于存储IP协议的结构体变量PF_INET 之前说了是 ipV4表示在这里设置 ipV4类型。 sockAddr.sin_addr.s_addr 这里是表示需要绑定的 ip 地址在这里使用 inet_addr(“127.0.0.1”) 进行指定。那为什么指定个 ip 还需要 inet_addr inet_addr 的作用是将一个字符串格式的ip地址转换成一个uint32_t数字格式。为什么要转换那肯定是因为 sockAddr.sin_addr.s_addr 是一个 uint32_t 这个类型了。 最后的 sockAddr.sin_port 是表示要指定某一个端口在这里指定 1234 这个端口。 所以该部分的代码就写成这样了 #includestdio.h #includeWinSock2.h #include stdlib.h int main(){WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), wsadata);SOCKET serverSock socket(PF_INET, SOCK_STREAM, 0);struct sockaddr_in sockAddr;sockAddr.sin_family PF_INET; //IPv4sockAddr.sin_addr.s_addr inet_addr(127.0.0.1); //服务器的IPsockAddr.sin_port htons(1234); //端口 }最后就是绑定一下了 bind(serverSock, (SOCKADDR*)sockAddr, sizeof(SOCKADDR));在这里 bind() 方法就是表示绑定信息了第一个参数是 serverSock 就是表示要绑定的 socket然后 (SOCKADDR*)sockAddr 就是需要绑定的地址最后一个就是一个地址长度。 (SOCKADDR*)sockAddr 我们讲过SOCKADDR 就是给函数使用的sockAddr 就是给系统使用的所以就这样写就没毛病了。 2.4 监听端口 先让你懵一下下面是代码 listen(serverSock, 20);简单吧listen 就是表示监听第一个参数就是要监听的 socket 第二个就是表示 同时能处理的最大连接。终于简单了这一步你爽我也爽还不懂就看下面漫画。 2.5 有人请求聊天设置个接待员 接下来就是有人请求给你聊天了那怎么办呢一个人忙不过来呢那就设置个接待员。 SOCKADDR cIntAddr; int nSize sizeof(SOCKADDR); SOCKET cIntSock accept(serverSock, (SOCKADDR*)cIntAddr, nSize);accept 函数就是一个接待员有人连接来敲门了就需要去接待换句比较专业的话就是 accept 接收一个套接字中已建立的连接。 传入的参数第一个 serverSock 就是一个已连接的套接字(SOCKADDR*)cIntAddr 是一个按照规定的指向struct sockaddr的指针所以我猜在前面创建最后一个就是所指向这个指针的长度咯。 设置完后就等于创建了一个接待员 cIntSock 。 不过要注意accept 没有连接的时候就会一直在等待不然不会执行下面的代码的。 这一部分的代码如下 #includestdio.h #includeWinSock2.h #include stdlib.h int main(){WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), wsadata);SOCKET serverSock socket(PF_INET, SOCK_STREAM, 0);struct sockaddr_in sockAddr;sockAddr.sin_family PF_INET; //IPv4sockAddr.sin_addr.s_addr inet_addr(127.0.0.1); //服务器的IPsockAddr.sin_port htons(1234); //端口listen(serverSock, 20);SOCKADDR cIntAddr; int nSize sizeof(SOCKADDR);SOCKET cIntSock accept(serverSock, (SOCKADDR*)cIntAddr, nSize); }2.6 开始循环聊天 在聊天的时候肯定是需要一个循环不用循环只能发一次信息就完成了所以肯定有一个 while while (1) {那循环里面写啥 当然是写你接收信息和发送信息的代码了我一次性贴上简简单单 while (1) {char sendBuf[50]{Hello client};char recvBuf[50];recv(cIntSock, recvBuf, 50, 0);printf(来自客户端:);printf(%s\n, recvBuf);printf_s(请输入内容:);scanf(%s,sendBuf);//sendBufs;//gets_s(sendBuf);send(cIntSock, sendBuf, strlen(sendBuf) 1, 0);}sendBuf就是一个字符数组用来输入自己的要输入的内容。 主要看recvrecv 接收4个参数第一个参数是建立的通信、第二个参数是是一个数组接收数据存放的地方、之后会缓存大小最后一个参数是指定调用方式不用管一般设置为0。 cIntSock 就是刚刚从套接字里接受的那个接待员现在就用接待员和他说话了。 接着就使用printf显示接待员听到的话简简单单。 然后就到我们输入信息使用scanf够简单了吧 接着使用 send函数发送信息就可以了第一个就是告诉接待员 cIntSock 要传达话了sendBuf 就是咱们要说的话第三个参数就是咱们说的话的长度最后一个依旧是0不用管。 这样就还差最后一步就完成服务端了此时咱们只需要关闭套接字就可以了最后还需要清理一下完整代码如下了 #includestdio.h #includeWinSock2.h #include stdlib.hint main() {WSADATA wsadata;WSAStartup(MAKEWORD(2, 2), wsadata);SOCKET serverSock socket(PF_INET, SOCK_STREAM, 0);struct sockaddr_in sockAddr;sockAddr.sin_family PF_INET;sockAddr.sin_addr.s_addr htons(INADDR_ANY);sockAddr.sin_port htons(1234);bind(serverSock, (SOCKADDR*)sockAddr, sizeof(SOCKADDR));listen(serverSock, 20);SOCKADDR cIntAddr; int nSize sizeof(SOCKADDR);SOCKET cIntSock accept(serverSock, (SOCKADDR*)cIntAddr, nSize);while (1) {char sendBuf[50]{Hello client};char recvBuf[50];recv(cIntSock, recvBuf, 50, 0);printf(来自客户端:);printf(%s\n, recvBuf);printf_s(请输入内容:);scanf(%s,sendBuf);send(cIntSock, sendBuf, strlen(sendBuf) 1, 0);}//关闭closesocket(cIntSock);closesocket(serverSock);WSACleanup();return 0; }三、客户端编写 客户端和服务端是一样的你信吗 下面是代码 #includestdio.h #includewinsock2.hint main() {WSADATA wsadata;int nRes WSAStartup(MAKEWORD(2, 2), wsadata);SOCKET sock socket(PF_INET, SOCK_STREAM, 0);struct sockaddr_in sockAddr;sockAddr.sin_family PF_INET; sockAddr.sin_addr.s_addr inet_addr(127.0.0.1); //只需要在这里指向服务器 ip 就可以了 sockAddr.sin_port htons(1234);//连接服务器connect(sock, (SOCKADDR*)sockAddr, sizeof(SOCKADDR));while (1) {char recvBuf[50];char sendBuf[50]{Hello server};printf(跟服务端说: );scanf(%s,sendBuf);send(sock, sendBuf, strlen(sendBuf) 1, 0);recv(sock, recvBuf, 50, 0);printf(服务端跟你说: );printf(%s\n, recvBuf);}closesocket(sock);WSACleanup();system(pause); }不同的几个点只有使用了 connect 连接服务器就没了难道你说不是吗 简简单单对吧那就行解决。 下面是演示示例 注意 若使用devc复制代码都报错则点击编译-编译选项 随后在出现的窗口中添加如下参数
http://www.zqtcl.cn/news/210560/

相关文章:

  • 南京电子商务网站建设23个营销专业术语
  • 建设银行官网官方网站学习网页制作的网站
  • 开发网站需要什么硬件今年最流行的装修风格
  • 门户网站建设中标结果百度资讯指数
  • 定制企业网站开发公司网站建设的6个基本步骤
  • 网站建设与维护案列网站作品怎么做
  • 茂名放心营销网站开发seo收费
  • 旅游网站品牌建设本地使用宝塔安装wordpress
  • 专门做外链的网站制作论坛类网站模板免费下载
  • 靖江建设行业协会网站投资做网站
  • 做网站视频背景潍坊网站制作建设
  • 深圳市官网网站建设哪家好百度抓取网站登录
  • 免费做cpa单页网站友情链接买卖代理
  • 免费网站建站排名中国最大的软件公司
  • 码云pages做静态网站广西建设培训网
  • 建设网站需要花钱吗网站seo方案策划书
  • 德阳网站怎么做seo陈木胜个人资料
  • 电子规划书商务网站建设wordpress主机推荐
  • wordpress设置多站点html5开发手机app
  • 移动互联和网站开发哪个好做推广便宜的网站有哪些
  • 极速网站建设定制价格微信公众号运营助手
  • .net制作网站开发教程在线修图编辑器
  • 哪些网站可以做详情页聊城高新区建设局网站
  • 湖南网站优化代运营山东建设厅证件查询网址
  • 以百度云做网站空间浙江外贸网站建设
  • 南通网站建设推广专家wordpress 信息流 主题
  • 网站培训机构有哪些大学生做企业网站
  • 网站培训班有哪些课程做的好的大学生旅行有哪些网站好
  • 昌江县住房和城乡建设局网站佛山建设网站制作
  • 做网站 图片 文件夹 放哪儿北京模板网站建设