网络编程 0903作业

作业

1、将TCP的CS模型再敲一遍

tcpserver.c

#include <myhead.h>
#define SERPORT 1111
#define SERIP "192.168.58.128"
#define BACKLOG 40
int main(int argc, const char *argv[])
{int oldfd = socket(AF_INET,SOCK_STREAM,0);//1、产生一个原始套接字文件描述符if(oldfd==-1){perror("socket");return -1;}printf("旧的套接字创建成功\n");//2、绑定主机的IP和端口号struct sockaddr_in  sin= {.sin_family = AF_INET, //使用IPv4通信协议族.sin_port = htons(SERPORT),  //设置端口号.sin_addr.s_addr = inet_addr(SERIP)     //设置IP地址为本机IP};//定义服务器地址结构体变量if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1)//2、绑定ip{perror("bind");return -1;}printf("绑定成功\n");if(listen(oldfd,BACKLOG)==-1)//3、监听客户端请求{perror("listen");return -1;}printf("监听成功\n");//使用新描述符通信char buff[1024] = "";int newfd;struct sockaddr_in  cin;//定义获取客户端信息的结构体socklen_t cinlen = sizeof(cin);//获取结构体大小newfd = accept(oldfd,(struct sockaddr *)&cin,&cinlen);//4、接收请求,创建新的描述符用于通信if(newfd==-1){perror("accept");return -1;}printf("%s:%d客户端发来连接请求\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));while(1)//5、收发消息{//int len = read(newfd,buff,sizeof(buff));memset(buff,0,sizeof(buff));//清空缓冲区int len = recv(newfd,buff,sizeof(buff),0);printf("读取的信息:%s\n",buff);if(len==0){printf("你客户跑了\n");}strcat(buff,"520");//write(newfd,buff,sizeof(buff));send(newfd,buff,sizeof(buff),0);memset(buff,0,sizeof(buff));//清空缓冲区}close(oldfd);close(newfd);return 0;
}

tcpclient.c

#include <myhead.h>#define CLIPORT 1111
#define CLIIP "192.168.58.128"
int main(int argc, const char *argv[])
{int oldfd = socket(AF_INET,SOCK_STREAM,0);//1、创建原始套节字if(oldfd==-1){perror("socket");return -1;}//2、bind可选//3、连接服务器struct sockaddr_in cin = {.sin_family = AF_INET,//IPV4通信.sin_port = htons(CLIPORT),//端口号转为网络字节序.sin_addr.s_addr = inet_addr(CLIIP)//IP地址转为网络字节序};if(connect(oldfd,(struct sockaddr *)&cin,sizeof(cin))==-1){perror("connect");return -1;}printf("连接服务器成功\n");char buff[1024] = "";while(1)//4、收发消息{memset(buff,0,sizeof(buff));printf("客户端发信息:");fgets(buff,sizeof(buff),stdin);send(oldfd,buff,sizeof(buff),0);//阻塞发送recv(oldfd,buff,sizeof(buff),0);//阻塞接收printf("收到服务器的消息:%s\n",buff);}close(oldfd);return 0;
}

2、UDP服务器中,使用connect函数,实现唯一的客户端与服务器通话

udpserver.c

#include <myhead.h>
#define SERPORT 8888
#define SERIP "192.168.58.128"int main(int argc, const char *argv[])
{//1、创建套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);//SOCK_DGRAM:UDPif(oldfd==-1){perror("socket");return -1;}//2、绑定struct sockaddr_in sin = {.sin_family = AF_INET,.sin_port = htons(SERPORT),.sin_addr.s_addr = inet_addr(SERIP)};if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("bind");return -1;}//3、收发消息struct sockaddr_in cin;socklen_t cinlen = sizeof(cin);connect(sockfd, (struct sockaddr*)&cin, sizeof(cin));char buff[100];while(1){memset(buff,0,sizeof(buff));int len = recvfrom(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,&cinlen);//不用管谁发的if(len==0){printf("客户端跑了\n");break;}printf("服务器接收的信息:%s\n",buff);//printf("服务器发消息:");//fgets(buff,sizeof(buff),stdin);//sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,sizeof(cin));//printf("发送成功\n");}close(oldfd);return 0;
}

udpclient.c

#include <myhead.h>
#define CLIPORT 8888
#define CLIIP "192.168.58.128"
int main(int argc, const char *argv[])
{int oldfd = socket(AF_INET,SOCK_DGRAM,0);//1、创建套接字if(oldfd ==-1){perror("socket");return -1;}struct sockaddr_in cin = {.sin_family = AF_INET,.sin_port = htons(CLIPORT),.sin_addr.s_addr = inet_addr(CLIIP)};char buff[1024]  ="";while(1)//2、收发信息{printf("客户端发消息:");fgets(buff,sizeof(buff),stdin);sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,sizeof(cin));printf("发送成功\n");}close(oldfd);return 0;
}

知识梳理

TCP和UDP通信基础:

基于TCP通信的流程

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

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

相关文章

台球助教预约系统小程序源码开发

引言 随着移动互联网的普及和技术的进步&#xff0c;小程序因其轻量级、便捷性以及良好的用户体验成为了连接线上与线下的重要桥梁。对于台球俱乐部而言&#xff0c;一个高效的小程序不仅可以帮助提高服务质量&#xff0c;还能增强用户粘性&#xff0c;提升品牌形象。本文将探讨…

yolov8目标检测pyside6可视化图形界面+检测源码ui文件——用于计数统计

项目结构 YOLOv8模型加载&#xff1a;加载预训练的YOLOv8模型。PySide6 GUI&#xff1a;设计图形用户界面&#xff0c;用于显示检测结果和控制选项。摄像头/视频输入&#xff1a;从摄像头或视频文件读取图像帧。目标检测&#xff1a;使用YOLOv8模型对输入图像进行实时目标检测…

自动生成对话视频!如何使用Captions的AI视频生成与编辑API工具?

Captions公司最近发布了一套AI驱动的视频生成和编辑API工具&#xff0c;为创作者和开发者提供了一个强大的视频创作生态系统。这个系统包含AI Creator、AI Twin、AI Edit、和AI Translate四大核心功能&#xff0c;每个工具都针对不同的创作需求进行优化。下面我们就一起来详细测…

超越卷积滤波器,HyCoT利用Transformer捕捉高光谱图像的全局依赖性 !

近年来&#xff0c;基于学习的高光谱图像&#xff08;HSI&#xff09;压缩模型的开发引起了大量关注。现有的模型主要使用卷积滤波器&#xff0c;仅捕捉局部依赖性。 此外&#xff0c;它们通常会带来高昂的训练成本&#xff0c;并具有较大的计算复杂性。 为了解决这些问题&…

重新修改 Qt 项目的 Kit 配置

要重新修改 Qt 项目的 Kit 配置&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 打开 Qt Creator 首先&#xff0c;启动 Qt Creator&#xff0c;确保你的项目已经打开。 2. 进入项目设置 在 Qt Creator 中&#xff0c;点击菜单栏的 “Projects” 标签&#xff08;通…

Android - Windows平台下Android Studio使用系统的代理

这应该是第一篇Android的博文吧。以后应该会陆续更新的。记录学习Android的点点滴滴。 之前也看过&#xff0c;不过看完书就忘了&#xff0c;现在重拾Android&#xff0c;记录学习历程。 为何要用代理 因为更新gradle太慢了。 如何使用系统的代理 先找到系统代理的ip和端口。…

OceanMind海睿思参加2024数博会“数据要素赋能生态”活动,获两项数据要素优秀产品认证

近日&#xff0c;2024数博会“数据要素赋能生态”交流活动在贵阳国际生态会议中心成功举办&#xff0c;中新赛克海睿思作为国内数据要素产业优秀服务商代表受邀参加并荣获两项数据要素优秀产品认证。 作为2024数博会的重要组成部分&#xff0c;本次交流活动由北京赛迪出版传媒有…

通配符证书的申请及配置教程

在当今高度互联的世界里&#xff0c;网站和应用程序需要确保其数据传输的安全性&#xff0c;以保护用户的隐私和敏感信息不被窃取。为此&#xff0c;HTTPS协议成为了标准配置&#xff0c;而SSL/TLS证书则是实现这一安全协议的重要组成部分。特别地&#xff0c;对于那些运营着多…

【Linux】CodeServer:云IDE部署

Code-server 是一个开源项目&#xff0c;它允许你在任何地方通过浏览器访问 Visual Studio Code&#xff08;VS Code&#xff09;编辑器。这意味着你可以在远程服务器或云端运行 VS Code&#xff0c;并通过浏览器进行编码、调试和开发&#xff0c;而不需要在本地安装 VS Code。…

Java基础(9)- Java代码笔记6

目录 一、数组常见算法 1.数组翻转 2.冒泡排序 3.二分查找 二、对象数组 1.基本使用 三、方法参数 1.基本数据类型和引用类型 2.基本数据类型做方法参数传递 3.引用数据类型做参数传递 四、命令行参数 五、其他操作 1.快速生成方法 2.快速抽代码到方法 3.debug调…

如何禁止电脑访问网站

一、修改Hosts文件 找到Hosts文件&#xff1a;在Windows系统中&#xff0c;Hosts文件通常位于C:\Windows\System32\drivers\etc\目录下。 编辑Hosts文件&#xff1a;以管理员身份打开记事本或任意文本编辑器&#xff0c;然后找到并打开Hosts文件。 添加禁止访问的域名&#…

JVM1-初识JVM

目录 什么是JVM JVM的功能 解释和运行 内存管理 即时编译 Java性能低的主要原因和跨平台特性 常见的JVM 什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名&#xff1a;Java虚拟机 JVM本质上是一个运行在计算机上的程序&#xff0c;它的职责是运行Java字…

HTTP 请求方法(method)介绍

目录 一、GET 二、POST 三、其他方法 3.1 PUT 3.2 DELETE 3.3 HEAD 3.4 OPTIONS 3.5 TRACE 3.6 CONNECT 3.7 PATCH 3.8 LINK 和 UNLINK&#xff08;扩展方法&#xff09; HTTP&#xff08;超文本传输协议&#xff09;定义了多种请求方法&#xff0c;如&#xff1a; …

C++对C的扩充(8.28)

1.使用C手动封装一个顺序表&#xff0c;包括成员数组1个&#xff0c;成员变量n个 代码&#xff1a; #include <iostream>using namespace std;//类型重命名 using datatype int; #define MAX 30struct seqList { private: //私有权限datatype *data; //相当于 …

AI赚钱成功案例|像素级拆解一键生成提示词 文生图 图生视频

本文背景 之前弄了个诗词转画面大师&#xff0c;就是你给个句子&#xff0c;它就能给你画面提示词&#xff0c;接着用 AI 绘图软件能生成很棒的画面&#xff0c;再把图片弄成视频&#xff0c;最后能出个不错的作品。 最近看到那些漫剪大师的作品&#xff0c;配的歌好听&#xf…

NameNode 的 Web 界面

http://127.0.0.1:50070/ 图片显示的是Hadoop的Web界面导航栏。导航栏包含以下选项&#xff1a; Hadoop&#xff1a;Hadoop的主页。Overview&#xff1a;集群的概览信息。Datanodes&#xff1a;数据节点的状态和信息。Datanode Volume Failures&#xff1a;数据节点的卷故障信…

Java项目: 基于SpringBoot+mysql旅游网站管理系统分前后台(含源码+数据库+开题报告+PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql旅游网站管理系统分前后台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作…

011.Python爬虫系列_bs4解析

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

尚硅谷Vue入门视频 笔记

尚硅谷视频&#xff1a;https://www.bilibili.com/video/BV1Zy4y1K7SH/?spm_id_from333.999.0.0&vd_sourcecec13bbe100bddfff8baf29d18ed8994 文章目录 模板语法data与el的2种写法MVVM模型事件事件修饰符事件的基本使用 计算属性简写形式 监视属性绑定样式条件渲染列表渲…

vue3+ts+vite+electron+electron-store+electron-builder打包可安装包

yarn create vite yarn add electron yarn add electron-store yarn add electron-builder 新增main.js、preload.js // main.js const { app, BrowserWindow, ipcMain, globalShortcut } require(electron) const path require(path) let store // 我们将在稍后动态导入 el…