网络 / day02 作业

1. TCP和UDP通信模型

1.1 TCP server

#include <myhead.h>#define PORT 9999
#define IP "192.168.250.100"int main(int argc, const char *argv[])
{//1. create socketint sfd = -1;if( (sfd = socket(AF_INET, SOCK_STREAM, 0 ))==-1   ){perror("socket error");return -1;}//param1: AF_INET -->ipv4 domain  //param2: AF_INET --> tcp protocal//param3; if param2 has specified only protocal, fill 0//returned: On success, a file descriptor for the new socket is returned.  On error, -1 is returned, and errno is set appropriately.printf("sfd = %d\n", sfd);  //2. bind address info structstruct sockaddr_in sin;sin.sin_family = AF_INET; //ipv4sin.sin_port = htons(PORT); // htons --> port in network bytes ordersin.sin_addr.s_addr = inet_addr(IP); //inet_addr--> address in network bytes orderif(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) == -1 ){perror("bind error");return -1;}//assigns the address specified by addr to the socket referred to by the file descriptor sockfd.  //addrlen  specifies  the  size,  in bytes, of the address structure pointed to by addr. printf("bind success _%d_%s_%s\n", __LINE__, __FILE__, __func__);	//3. listen() if( listen(sfd, 128) ==-1   ){perror("listen error");return -1;}//listen()  marks  the  socket  referred to by sockfd as a passive socket, //that is, as a socket that will be used to accept incoming connection requests using accept(2).printf("listen success _%d_%s_%s\n", __LINE__, __FILE__, __func__);//4. accept/*if(accept(sfd, NULL, NULL) == -1 ) // NULL, NULL means skip client info{perror("accept error");return -1;}printf("accept success _%d_%s_%s\n", __LINE__, __FILE__, __func__);*/// 4.1 accept, recv client info// define client info structstruct sockaddr_in cin;socklen_t socklen = sizeof(cin);//4.2 recv client requestsint newfd = -1;if( (newfd = accept(sfd, (struct sockaddr*)&cin, &socklen)) == -1 ){perror("accept error");return -1;}printf("[%s:%d] accept success, newfd = %d\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), newfd);//5. data send/recvchar rbuf[128] = "";while(1){//clean bufbzero(rbuf, sizeof(rbuf));int res = recv(newfd, rbuf, sizeof(rbuf), 0);//param1: file descriptor//param2: buff//param3: size//param4: blockif(res == 0){printf("client off line\n");break;}printf("[%s:%d] : %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), rbuf);//send back msg to clinetstrcpy(rbuf, "\n*_*\n");send(newfd, rbuf, sizeof(rbuf), 0);}close(newfd);close(sfd);return 0;
}

1.2 TCP client

#include <myhead.h>#define PORTSVC 9999
#define IPSVC "192.168.250.100"#define PORTCLI 6666
#define IPCLI "192.168.250.100"int main(int argc, const char *argv[])
{//1. create socketint cfd = -1;if( (cfd = socket(AF_INET, SOCK_STREAM, 0))==-1 ){perror("socket error");return -1;}printf("cfd = %d\n", cfd);//端口号快速重用int reuse = -1;if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){perror("setsockopt error");return -1;}//2. bindingstruct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(PORTCLI);cin.sin_addr.s_addr = inet_addr(IPCLI);if(bind(cfd, (struct sockaddr *)&cin, sizeof(cin)) == -1){perror("bind error");return -1;}printf("bind success\n");//3. connect serverstruct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORTSVC);sin.sin_addr.s_addr = inet_addr(IPSVC);if( connect(cfd, (struct sockaddr *)&sin, sizeof(sin)) == -1){perror("connect error");return -1;}//4. data send/recvchar wbuf[128] = "";while(1){bzero(wbuf, sizeof(wbuf));//input textfgets(wbuf, sizeof(wbuf), stdin);wbuf[strlen(wbuf) - 1] = 0;if(strcmp(wbuf, "quit") == 0){printf("exit client\n");break;}//send data to svcsend(cfd, wbuf, sizeof(wbuf), 0);//data recvbzero(wbuf, sizeof(wbuf));int res = recv(cfd, wbuf, sizeof(wbuf), 0);if(res == 0){printf("server is off line\n");break;}printf("[%s:%d]: %s\n", IPSVC, PORTSVC, wbuf);}close(cfd);return 0;
}

2.1 upd server

#include <myhead.h>#define PORT 9999
#define IP "192.168.250.100"int main(int argc, const char *argv[])
{//1. create socketint sfd = -1;if( (sfd=socket(AF_INET, SOCK_DGRAM, 0 )) == -1 ){perror("socket error");return -1;	}printf("sfd=%d\n", sfd);// port resueint reuse = 1;if( setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1 ){perror("setsockopt error");return -1;}//3. bind IPstruct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(bind(sfd, (struct sockaddr *)&sin, sizeof(sin)) == -1){perror("setsockopt error");return -1;}printf("bind success\n");//4. data recv/sendchar buf[128] = "";//addr struct struct sockaddr_in cin;socklen_t socklen = sizeof(cin);while(1){bzero(buf, sizeof(buf));recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cin, &socklen);printf("[%s:%d]: %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);//feedback to clinetstrcpy(buf, "*_*");sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr *)&cin, sizeof(cin) );printf("send success\n");}close(sfd);return 0;
}

2.2 upd client

#include <myhead.h>#define PORT 9999
#define IP "192.168.250.100"int main(int argc, const char *argv[])
{//1. create socketint cfd =-1;if( (cfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1   ){perror("socket error");return -1;}printf("cfd = %d\n", cfd);//2. binding ip, optional//3. define addr struct for data sendingstruct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);char buf[128] = "";//struct sockaddr_in cin;//socklen_t socklen = sizeof(cin);while(1){bzero(buf, sizeof(buf));// send data to serverfgets(buf, sizeof(buf), stdin);buf[strlen(buf) - 1] = 0;sendto(cfd, buf, sizeof(buf), 0, (struct sockaddr *)&sin, sizeof(sin));//recv data from serverrecvfrom(cfd, buf, sizeof(buf), 0, NULL, NULL );printf("msg from svc: %s\n", buf);}return 0;
}

2. 思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Jemeter对HTTP接口压测

我们不应该仅仅局限于某一种工具&#xff0c;性能测试能使用的工具非常多&#xff0c;选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验&#xff0c;也算略有小成&#xff0c;任何性能测试&#xff08;如压力测试、负载测试、疲劳强度测试等&#…

性能测试之Artillery(示例及指标)

官方文档&#xff1a;https://www.artillery.io/docs/get-started/first-test PS:文档挺详细&#xff0c;教程比较全 示例 config:http:extendedMetrics: truetarget: http://127.0.0.1:8005phases:- duration: 10 # 持续时间arrivalRate: 10 # 每秒创建10个用户rampTo: 100 …

SwitchHosts - 管理、切换多个 hosts 方案的工具

一、hosts文件 简单的说&#xff0c;hosts文件是用于本地dns服务的&#xff0c;采用ip 域名的格式写在一个文本文件当中&#xff0c;Hosts是一个没有扩展名的系统文件&#xff0c;可以用记事本等工具打开&#xff0c;其作用就是将一些常用的网址域名与其对应的IP地址建立一个关…

Tor网络原理详解

引入 匿名通信是一种通过采用数据转发、内容加密、流量混淆等措施来隐藏通信内容及关系的隐私保护技术。为了提高通信的匿名性&#xff0c;这些数据转发链路通常由多跳加密代理服务节点构成&#xff0c;而所有这些节点即构成了匿名通信系统&#xff08;或称匿名通信网络&#…

在排序数组中查找元素的第一个和最后一个位置(Java详解)

一、题目描述 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示…

OpenTiny Vue 组件库3.12.0 发布:文档大优化!增加水印和二维码两个新组件

非常高兴跟大家宣布&#xff0c;2023年11月30日&#xff0c;OpenTiny Vue 发布了 v3.12.0 &#x1f389;。 OpenTiny 每次大版本发布&#xff0c;都会给大家带来一些实用的新特性&#xff0c;10.24 我们发布了 v3.11.0 版本&#xff0c;增加了富文本、ColorPicker 等4个新组件…

linux下查看进程资源ulimit

ulimit介绍与使用 ulimit命令用于查看和修改进程的资源限制。下面是ulimit命令的使用方法&#xff1a; 查看当前资源限制&#xff1a; ulimit -a 这将显示当前进程的所有资源限制&#xff0c;包括软限制和硬限制。查看或设置单个资源限制&#xff1a; ulimit -<option> …

喜报丨迪捷软件入选2023年浙江省信息技术应用创新典型案例

12月6日&#xff0c;浙江省经信厅公示了2023年浙江省信息技术应用创新典型案例入围名单。本次案例征集活动&#xff0c;由浙江省经信厅、省密码管理局、工业和信息化部网络安全产业发展中心联合组织开展&#xff0c;共遴选出24个优秀典型解决方案&#xff0c;迪捷软件“基于全数…

安装鸿蒙开发者工具DevEco Studio

1.进入官网下载工具 https://developer.harmonyos.com/cn/develop/deveco-studio/ 选择您电脑对应的系统下载即可 2.安装 很简单直接点击“next”,此处不做赘述 3.配置环境 安装完成后&#xff0c;打开DevEco Studio 会提示配置环境。安装node.js和ohpm 如果不小心关了&a…

DevEco Studio无法识别本地模拟器设备的解决方法

遇到了一个问题&#xff0c;之前测试无误的本地模拟器&#xff0c;运行后设备栏中无法识别了。 此时保持模拟器处于开启状态&#xff0c;关闭DevEco Studio窗口重新启动后&#xff0c;发现重新识别设备了。

【CASS精品教程】cass11提示“请不要在虚拟机中运行此程序”的解决办法

文章目录 一、问题提示二、解决办法一、问题提示 按照正常安装教程安装好南方测绘cass 11之后,打开的时候可能会有以下提示:请不要在虚拟机中运行此程序,如下图所示: 遇到问题,咱们就想办法解决问题,下面将自己尝试的方法及最终解决情况跟大家说一下,供参考。 二、解决…

Linux---压缩和解压缩命令

1. 压缩格式的介绍 Linux默认支持的压缩格式: .gz.bz2.zip 说明: .gz和.bz2的压缩包需要使用tar命令来压缩和解压缩.zip的压缩包需要使用zip命令来压缩&#xff0c;使用unzip命令来解压缩 压缩目的: 节省磁盘空间 2. tar命令及选项的使用 命令说明tar压缩和解压缩命令 …

Linux centos7安装redis 6.2.14 gz并且使用systemctl为开机自启动 / 彻底删除 redis

1.下载 && 减压 wget http://download.redis.io/releases/redis-6.2.14.tar.gz tar -zvxf redis-6.2.14.tar.gz 2.编译&#xff08;分开运行&#xff09; cd redis-6.2.14 make cd src make install 安装目录展示 3.redis.conf 配置更改 daemonize yes supervised s…

智能优化算法应用:基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.JAYA算法4.实验参数设定5.算法结果6.参考文献7.MA…

IDEA配置一个新项目

git clone xxxxx 下载项目主分支 git checkout xxx 切换到需要开发的分支上 配置maven仓库 在File下的Settings中设置maven仓库 配置maven仓库的文件夹 配置好maven后&#xff0c;项目中会出现一个红色的pom.xml文件&#xff0c;右击文件&#xff0c;点击…&#xff0c;pom…

配置Nginx解决跨域问题

Nginx 中将前端请求中的所有以 “/apiUrl” 开头的路径代理到 http://192.12.200.101:9813 例如&#xff1a; /apiUrl/login > http://192.12.200.101:9813/login 配置nginx环境 进入Nginx 的配置文件编辑界面: sudo nano /etc/nginx/conf.d/default.conf开始编辑 defaul…

基于Springboot的旅游网站设计与实现(论文+调试+源码)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

数据手册Datasheet解读-MOS管笔记

数据手册Datasheet解读-MOS管笔记 NMOS应用场景一般特征第一个参数Vdss第二、三个参数Rds&#xff08;on&#xff09;、IdMOS管的散热绝对最大额定值第一个参数-Vd第二个参数-Vdgr第三个参数-Vg(栅源电压)第四个参数-Id第五个参数-Idm第六个参数-Ptot第七个参数-Viso第七和八的…

模块四(一):搭建自己的SSR

前言&#xff1a;同构渲染是将服务器渲染和客户端渲染相结合的一种渲染方式&#xff0c;在服务端生成初始页面&#xff0c;提升首屏加载速度&#xff0c;并且有利于SEO&#xff1b;在客户端接管HTML&#xff0c;并且将静态HTML激活为数据绑定的动态HTML&#xff0c;为用户提供更…

Unity 常用资料

1. Layer layer本质是按序左移的一个Int32数字&#xff0c;int32有4个字节》32位&#xff0c;故可以支持32个层级。系统自身使用了5个层&#xff0c;意味着用户还有27个层可以使用。 0000 0000 0000 0000 0000 0000 0000 0000 可以且只能任意位为1。unity具体的0-31的层级分布…