2.29作业

T课上实现通信代码总结:

程序代码:

TCPSER.c

#include<myhead.h>
#define SER_IP "192.168.244.140"     //服务器IP
#define SER_PORT 9999                //服务器端口号  
int main(int argc, const char *argv[])
{//1.创建用于监听的套接字int sfd = -1;sfd = socket(AF_INET , SOCK_STREAM , 0);//参数1:表示使用的是ipv4的通信//参数2:表示使用tcp通信类型//参数3:表示前面已经特定了通信协议if(sfd == -1){perror("socket error");return -1;}printf("sfd = %d\n",sfd);//2.绑定ip地址和端口号//2.1填充地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;         //地址族sin.sin_port =    htons(SER_PORT);//端口号sin.sin_addr.s_addr = inet_addr(SER_IP);  //IP地址//2.2绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success\n");//3.启动监听,允许客户端连接if(listen(sfd,128) == -1){perror("listen error\n");return -1;}printf("listen success\n");//4.当有客户端发来连接请求后,创建新的用于通信的套接字//如果不想接收客户端地址信息结构体,则无需传入参数2和参数3//如果想要获取客户端信息结构体,则需要传入相关参数struct sockaddr_in cin;       //用于接收客户端地址信息结构体socklen_t socklen = sizeof(cin);int newfd = accept(sfd,(struct sockaddr*)&cin,&socklen);if(newfd == -1){perror("accept error");return -1;}printf("newfd = %d 您有新的客户已经上线\n",newfd);printf("客户端IP:%s ,端口号为:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5.通信套接字与客户端进行数据收发char rbuf[128] = "";while(1){//清空容器bzero(rbuf,sizeof(rbuf));//从套接字中读取数据int res = recv(newfd,rbuf,sizeof(rbuf),0);if(res == 0){printf("客户端已经下线\n");break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);//将收到的信息加上其他字符传回去strcat(rbuf,"*-*");send(newfd,rbuf,strlen(rbuf),0);}//6.关闭套接字close(newfd);close(sfd);return 0;
}

 TCPCLI.c

#include<myhead.h>
#define SER_IP "192.168.244.140"      //服务器ip
#define SER_PORT 9999                 //服务器端口号
int main(int argc, const char *argv[])
{//1.创建用于通信的套接字文件描述符int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n",cfd);//2.绑定(非必须)//3.连接服务器//3.1填充要连接的服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;               //地址族sin.sin_port = htons(SER_PORT);         //端口号sin.sin_addr.s_addr = inet_addr(SER_IP); //ip地址//3.2连接服务器if(connect(cfd ,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("connect error");return -1;}printf("connect success\n");//4.数据收发char wbuf[128] ="";while(1){//清空数据bzero(wbuf,sizeof(wbuf));printf("请输入》》");fgets(wbuf,sizeof(wbuf),stdin);     //从终端输入wbuf[strlen(wbuf)-1] = 0;//将数据发送给服务器send(cfd , wbuf , strlen(wbuf) , 0);printf("发送成功\n");//判断发送的数据if(strcmp(wbuf,"quit") == 0){break;}//接受服务器发来的信息//清空数据bzero(wbuf,sizeof(wbuf));recv(cfd , wbuf , sizeof(wbuf), 0);printf("收到信息为:%s\n",wbuf);}//5.关闭套接字close(cfd);return 0;
}

UDPSER.c

#include<myhead.h>
#define SER_IP "192.168.244.140"       //服务器IP
#define SER_PORT 9999                  //服务器端口号
int main(int argc, const char *argv[])
{//创建用于通信的套接字int sfd = socket(AF_INET,SOCK_DGRAM,0);if(sfd == -1){perror("socket error");return -1;}printf("sfd = %d\n",sfd);//绑定IP地址和端口号//填充地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;          //地址族sin.sin_port = htons(SER_PORT);    //端口号sin.sin_addr.s_addr = inet_addr(SER_IP);     //IP地址//绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success\n");//收发数据char rbuf[128] = "";//定义容器接受对端地址信息结构体struct sockaddr_in cin;socklen_t socklen = sizeof(cin);while(1){//清空数组bzero(rbuf , sizeof(rbuf));//接收数据recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&socklen);printf("收到信息为:%s\n",rbuf);//将消息加“*_*”返回strcat(rbuf,"*_*");if(sendto(sfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&cin,socklen) == -1){perror("sendto error");return -1;}}//关闭套接字close(sfd);return 0;
}

UDPCLI.c

#include<myhead.h>
#define SER_IP "192.168.244.140"       //服务器IP
#define SER_PORT 9999                  //服务器端口号
int main(int argc, const char *argv[])
{//创建用于通信的套接字int cfd = socket(AF_INET,SOCK_DGRAM,0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n",cfd);//绑定IP地址和端口号(非必要)//收发数据char wbuf[128] = "";//定义容器,记录服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);while(1){//清空数组bzero(wbuf , sizeof(wbuf));//从终端获取数据printf("请输入:");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1] = 0;//将数据发送给服务器sendto(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sin,sizeof(sin));printf("发送成功\n");//接收服务器回复的消息bzero(wbuf , sizeof(wbuf));recvfrom(cfd,wbuf,sizeof(wbuf), 0 ,NULL,NULL);printf("收到的信息为:%s\n",wbuf);}//关闭套接字close(cfd);return 0;
}

运行结果:

课程总结:

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

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

相关文章

为什么猫咪挑食不吃猫粮?适口性好、普口性价的主食冻干推荐

现代养猫人士往往把自家的小猫看作是生活中的小宝贝&#xff0c;十分宠爱。最令人头疼的就是猫咪挑食不吃猫粮&#xff0c;为什么猫咪挑食不吃猫粮&#xff1f;猫咪挑食应该怎么办&#xff1f;今天为大家分享一个既不让咱宝贝猫咪受罪又可以改善猫咪挑食的方法。 一、为什么猫咪…

深入理解nginx的https sni机制

目录 1. 概述2. 初识sni3. nginx的ssl证书配置指令3.1 ssl_certificate3.2 ssl_certificate_key3.3 ssl_password_file4. nginx源码分析4.1 给ssl上下文的初始化4.2 连接初始化4.3 处理sni回调4.2 动态证书的加载5. 总结阅读姊妹篇: 深入理解nginx的https alpn机制 1. 概述 SN…

Vue+SpringBoot打造音乐偏好度推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1.2 我的喜好模块2.1.3 每日推荐模块2.1.4 通知公告模块 2.2 用例图设计2.3 实体类设计2.4 数据库设计 三、系统展示3.1 登录注册3.2 音乐档案模块3.3 音乐每日推荐模块3.4 通知公告模…

外包干了6个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了重庆一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

Dockerfile(1) - FROM 指令详解

FROM 指明当前的镜像基于哪个镜像构建dockerfile 必须以 FROM 开头&#xff0c;除了 ARG 命令可以在 FROM 前面 FROM [--platform<platform>] <image> [AS <name>]FROM [--platform<platform>] <image>[:<tag>] [AS <name>]FROM […

Java+SpringBoot+Vue+MySQL:员工健康管理技术新组合

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

TCP的三次握手和四次挥手 | 查看网络状态

三次握手和四次挥手是在计算机网络中用于建立和终止TCP连接的协议。这两个过程是TCP协议的重要组成部分&#xff0c;确保数据的可靠传输。 三次握手指的是在客户端和服务器之间建立连接时的步骤。具体流程如下&#xff1a; 客户端向服务器发送一个连接请求报文段&#xff08;…

Git教程-Git的基本使用

Git是一个强大的分布式版本控制系统&#xff0c;它不仅用于跟踪代码的变化&#xff0c;还能够协调多个开发者之间的工作。在软件开发过程中&#xff0c;Git被广泛应用于协作开发、版本管理和代码追踪等方面。以下是一个详细的Git教程&#xff0c;我们将深入探讨Git的基本概念和…

数据结构——lesson4带头双向循环链表实现

前言✨✨ &#x1f4a5;个人主页&#xff1a;大耳朵土土垚-CSDN博客 &#x1f4a5; 所属专栏&#xff1a;数据结构学习笔记​​​​​​ &#x1f4a5;双链表与单链表的区分&#xff1a;单链表介绍与实现 &#x1f4a5;对于malloc函数有疑问的:动态内存函数介绍 感谢大家的观看…

tomcat安装步骤流程

安装tomcat是基于安装java的基础上的 JAVA 举例说明&#xff1a; 关闭防火墙 下载java [rootlocalhost ~]#yum install java -y rootlocalhost ~]#yum install epel-release.noarch -y [rootlocalhost ~]#yum provides */javac [rootlocalhost data]#yum install java-1.8.0-o…

6.1 deeplabv3+的pth模型转换为rknn模型

和yolov5的pth模型转换为rknn模型类似&#xff0c;deeplabv3的pth模型转为rknn模型的步骤是&#xff1a; pth------>onnx-------->rknn 1.pth转为onnx 代码如下&#xff1a; #!/usr/bin/env python3 # -*- coding: utf-8 -*- # by [jackhanyuan](https://github.com/…

实现一个线程安全的单例模式

单例模式 单例模式能保证某个类在程序中只存在唯⼀⼀份实例,⽽不会创建出多个实例 某个类,在一个类,只应该创建出一个实例,使用单例模式,就可以对咱们的代码进行一个更严格的校验和检查 单例模式具体的实现⽅式有很多.最常⻅的是"饿汉"和"懒汉"两种单例…

DevEco Studio下载与安装(Windows)

下载地址&#xff1a; HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装时直接点击 next 即可。 运⾏已安装的DevEco Studio&#xff0c;⾸次使⽤&#xff0c;请选择Do not import settings&#xff0c;单击OK。 1.安装Node.js 如果本地有下载&#xff0c;可以…

前端JS 时间复杂度和空间复杂度

时间复杂度 BigO 算法的时间复杂度通常用大 O 符号表述&#xff0c;定义为 T(n) O(f(n)) 实际就是计算当一个一个问题量级&#xff08;n&#xff09;增加的时候&#xff0c;时间T增加的一个趋势 T(n)&#xff1a;时间的复杂度&#xff0c;也就相当于所消耗的时长 O&#xff1…

乐吾乐Web可视化RTSP播放

背景 乐吾乐致力于物联网和智能制造等场景的Web可视化平台和解决方案&#xff0c;其中摄像头播放必不可少。 当前国内摄像头都以RTSP协议为主&#xff0c;而HTML不能直接读取RTSP协议&#xff0c;因此需要一个转流服务。乐吾乐Web可视化播放RTSP也是如此&#xff1a; RTSP协…

理解计算着色器中glsl语言的内置变量

概要 本文通过示例的方式&#xff0c;着重解释以下几个内置变量&#xff1a; gl_WorkGroupSizegl_NumWorkGroupsgl_LocalInvocationIDgl_WorkGroupIDgl_GlobalInvocationID 基本概念 局部工作组与工作项 一个3x2x1的局部工作组示例如下&#xff0c;每个小篮格子表示一个工作项…

Vulnhub靶机:basic_pentesting_1

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.4&#xff09; 靶机&#xff1a;basic_pentesting_1&#xff08;10.0.2.6&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/en…

TCP缓存

TCP缓存是指TCP协议在数据传输过程中使用的一种机制&#xff0c;用于临时存储和管理数据包。它主要有三个作用&#xff1a;提高网络性能、保证数据的可靠性和实现流量控制。 首先&#xff0c;TCP缓存可以提高网络性能。当发送端发送数据时&#xff0c;TCP协议会将数据分割成若…

如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

VR危险环境模拟介绍|VR虚拟现实设备

VR危险环境模拟是指利用虚拟现实技术来模拟和展现各种危险环境&#xff0c;以便训练人员应对紧急情况、提高安全意识和应急反应能力。这种模拟可以涉及到工业、医疗、紧急救援等多个领域&#xff0c;旨在帮助人们在真实环境中面对危险时能够做出正确的应对和决策。 VR危险环境…