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

6.19作业

TCP服务器

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>#define PORT 8888
#define IP "192.168.124.39"#define ERR_MSG(msg) do{\fprintf(stderr,"line:%d",__LINE__);\fprintf(stderr,"func:%s",__func__);\perror(msg);\}while(0)int main(int argc, const char *argv[])
{//创建流式套节奏int sfd=socket(AF_INET,SOCK_STREAM,0);if(sfd<0){ERR_MSG("socket");return -1;}printf("流式套节奏创建完毕 sfd=%d\n",sfd);//允许端口快速被复用int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0){ERR_MSG("setsockopt");return -1;}printf("允许端口快速重用\n");//填充服务器地址信息结构体给bind函数使用//真实的地址信息结构体根据地址族制度,AF_INET-->>man 7 ipstruct sockaddr_in sin;sin.sin_family=AF_INET;//必须填AF_INETsin.sin_port=htons(PORT);//端口号的网络字节序 1024~49151sin.sin_addr.s_addr=inet_addr(IP);//本机IP,ifconfig,必须是桥接模式//绑定服务器地址信息,必须绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("bing");return -1;}//将套节奏设置为被动监听状态if(listen(sfd,128)<0){ERR_MSG("listen");return -1;}printf("监听成功\n");//获取连接成功的客户端信息,生成一个新的套节奏文件描述符struct sockaddr_in cin;socklen_t addrlen=sizeof(cin);int newfd=accept(sfd,(struct sockaddr*)&cin,&addrlen);if(newfd<0){ERR_MSG("accpet");return -1;}printf("[%s:%d] newfd=%d 客户端链接成功\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd);char buf[128]="";ssize_t res;char buf2[128]="";ssize_t res2;while(1){bzero(buf,sizeof(buf));//接收res=recv(newfd,buf,sizeof(buf),0);if(res<0){ERR_MSG("recv");return -1;}else if(res==0){printf("[%s:%d]客户端下线\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));break;}printf("[%s:%d]newfd=%d: %s\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,buf);//发送res2=send(newfd,buf,sizeof(buf),0);if(res2<0){ERR_MSG("send");return -1;}printf("发送成功\n");}//关闭文件描述符if(close(sfd)<0){ERR_MSG("close");return -1;}return 0;
}

TCP客服端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>#define PORT 8888
#define IP "192.168.124.38"#define ERR_MSG(msg) do{\fprintf(stderr,"line:%d\n",__LINE__);\fprintf(stderr,"func:%s\n",__func__);\perror(msg);\}while(0)int main(int argc, const char *argv[])
{//创建流式套节奏int cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd<0){ERR_MSG("socket");return -1;}printf("流式套节奏创建完毕 cfd=%d\n",cfd);//填充服务器地址信息结构体给bind函数使用//真实的地址信息结构体根据地址族制度,AF_INET-->>man 7 ip/*struct sockaddr_in sin;sin.sin_family=AF_INET;//必须填AF_INETsin.sin_port=htons(PORT);//端口号的网络字节序 1024~49151sin.sin_addr.s_addr=inet_addr(IP);//本机IP,ifconfig,必须是桥接模式*/struct sockaddr_in sin2;sin2.sin_family=AF_INET;//必须填AF_INETsin2.sin_port=htons(PORT);//端口号的网络字节序 1024~49151sin2.sin_addr.s_addr=inet_addr(IP);//本机IP,ifconfig,必须是桥接模式//绑定客户端地址信息,不是必须绑定//未绑定由于电脑自动分配一个端口号/*if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("bing");return -1;}*///链接指定的服务器if(connect(cfd,(struct sockaddr*)&sin2,sizeof(sin2))<0){ERR_MSG("connect");return -1;}printf("连接服务器[%s:%d]成功\n",IP,PORT);char buf[128]="hello";ssize_t res;char buf2[128]="";ssize_t res2;while(1){bzero(buf,sizeof(buf2));		//发送printf("请输入:");fgets(buf2,sizeof(buf2),stdin);res2=send(cfd,buf2,sizeof(buf2),0);if(res2<0){ERR_MSG("send");return -1;}printf("发送成功\n");//接收bzero(buf,sizeof(buf));res=recv(cfd,buf,sizeof(buf),0);if(res<0){ERR_MSG("recv");return -1;}else if(res==0){printf("[%s:%d]cfd=%d服务器下线\n",IP,PORT,cfd);break;}printf("[%s:%d]newfd=%d : %s\n",IP,PORT,cfd,buf);}//关闭文件描述符if(close(cfd)<0){ERR_MSG("close");return -1;}return 0;
}

UDP服务器

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>      
#define PORT 6666
#define IP "192.168.124.39"#define ERR_MSG(msg) do{\fprintf(stderr,"line:%d",__LINE__);\fprintf(stderr,"func:%s",__func__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{//创建报式套节字int sfd = socket(AF_INET,SOCK_DGRAM,0);if(sfd<0){ERR_MSG("sfd");return -1;}printf("报式套接字创建成功,sfd=%d\n",sfd);//允许端口快速被复用int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0){ERR_MSG("setsockopt");return -1;}printf("允许端口快速重用\n");//填充服务器的地址信息结构体给bind函数使用//真实的地址信息结构体根据地址族制度,AF_INET-->>man 7 ipstruct sockaddr_in sin;sin.sin_family=AF_INET;//必须填AF_INETsin.sin_port=htons(PORT);//端口号的网络字节序 1024~49151sin.sin_addr.s_addr=inet_addr(IP);//本机IP,ifconfig,必须是桥接模式//绑定服务器的地址信息,必须绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("bing");return -1;}printf("绑定成功\n");char buf[128]="";struct sockaddr_in cin;//存储接收到的对端的地址信息socklen_t addrlen=sizeof(cin);while(1){bzero(buf,sizeof(buf));//接收数据//if(recvfrom(sfd,buf,sizeof(buf),0,NULL,NULL)<0){if(recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen)<0){ERR_MSG("recvrom");return -1;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);//发送数据strcat(buf,"*-*");if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin))<0){ERR_MSG("sendto");return -1;}printf("发送成功\n");}//关闭套接字文件描述符close(sfd);return 0;
}

UDP客户端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>      
#define PORT 6666
#define IP "192.168.124.39"#define ERR_MSG(msg) do{\fprintf(stderr,"line:%d",__LINE__);\fprintf(stderr,"func:%s",__func__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{//创建报式套节字int sfd = socket(AF_INET,SOCK_DGRAM,0);if(sfd<0){ERR_MSG("sfd");return -1;}printf("报式套接字创建成功,sfd=%d\n",sfd);//允许端口快速被复用int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0){ERR_MSG("setsockopt");return -1;}printf("允许端口快速重用\n");//填充服务器的地址信息结构体给bind函数使用//真实的地址信息结构体根据地址族制度,AF_INET-->>man 7 ip//填充对端地址信息结构体,给sestruct sockaddr_in sin;sin.sin_family=AF_INET;//必须填AF_INETsin.sin_port=htons(PORT);//端口号的网络字节序 1024~49151sin.sin_addr.s_addr=inet_addr(IP);//本机IP,ifconfig,必须是桥接模式//绑定服务器的地址信息,必须绑定/*if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("bing");return -1;}printf("绑定成功\n");*/char buf[128]="";char buf2[128]="";struct sockaddr_in cin;//存储接收到的对端的地址信息socklen_t addrlen=sizeof(cin);while(1){bzero(buf2,sizeof(buf));//发送数据printf("请输入:");fgets(buf2,sizeof(buf2),stdin);buf[strlen(buf)-1]='\0';if(sendto(sfd,buf2,sizeof(buf2),0,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("sendto");return -1;}printf("发送成功\n");bzero(buf,sizeof(buf));//接收数据//if(recvfrom(sfd,buf,sizeof(buf),0,NULL,NULL)<0){if(recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen)<0){ERR_MSG("recvrom");return -1;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);}//关闭套接字文件描述符close(sfd);return 0;
}

相关文章:

6.19作业

TCP服务器 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <string.h>#define PORT 8888 #define IP "192.168.124.39&q…...

java 线程之间通信-volatile 和 synchronized

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…...

资源宝库网站!人人必备的神器!

面对网络中海量的内容&#xff0c;一个高效、便捷的网络导航工具&#xff0c;可以帮助我们快速查找使用网络资源。无论是职场精英还是学生党&#xff0c;使用导航网站都可以帮助我们提升效率。下面小编就来和大家分享一款资源宝库网站-办公人导航-实用的办公生活导航网站&#…...

Redis实战—优惠卷秒杀(锁/事务/代理对象的应用)

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P50 - P54 目录 优惠卷秒杀下单功能实现 超卖问题 悲观锁与乐观锁 实现CAS法乐观锁 一人一单功能实现 代码优化 代码细节分析 优惠卷秒杀下单功能实现 ​ ​ Controller层…...

HTML星空特效

目录 写在前面 完整代码 代码分析 运行效果 系列文章 写在后面 写在前面 100行代码实现HTML星空特效。 完整代码 全部代码如下。 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&g…...

银行数仓项目实战(四)--了解银行业务(存款)

文章目录 项目准备存款活期定期整存整取零存整取存本取息教育储蓄定活两便通知存款 对公存款对公账户协议存款 利率 项目准备 &#xff08;贴源层不必写到项目文档&#xff0c;因为没啥操作没啥技术&#xff0c;只是数据。&#xff09; 可以看到&#xff0c;银行的贴源层并不紧…...

MySQL版本发布模型

MySQL 8.0 之后使用了新的版本控制和发布模型&#xff0c;分为两个主线&#xff1a;长期支持版&#xff08;LTS&#xff09;以及创新版。这两种版本都包含了缺陷修复和安全修复&#xff0c;都可以用于生产环境。 下图是 MySQL 的版本发布计划&#xff1a; 长期支持版 MySQL…...

java: 不兼容的类型: org.apache.xmlbeans.XmlObject无法转换为x2006.main.CTRow

我使用的xmlbeans版本是5.0&#xff0c;使用xmlbeans包做转换时&#xff0c;报错&#xff0c;正如标题显示得那样 解决办法 额外再引入下面的jar包 <dependency><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId><…...

内容时代:品牌如何利用社交平台精准触达用户

还记得学生时代老师教写作文的时候常说的一句话就是“开头质量决定了阅卷老师想不想花精力去读&#xff0c;而内容质量决定了她愿不愿意给你判高分”这个世界仿若一个巨大的圆&#xff0c;同样的逻辑放在任何地方好像都能适用。在品牌营销中&#xff0c;内容已成为品牌与消费者…...

推荐4款PC端黑科技工具,快来看看,建议收藏

Thunderbird Thunderbird 是由 Mozilla 基金会开发的一款免费且开源的电子邮件客户端&#xff0c;支持 Windows、macOS、Linux 等多种操作系统。它不仅可以用于发送和接收电子邮件&#xff0c;还可以作为新闻阅读器、聊天工具以及日历应用。 Thunderbird 提供了丰富的功能&…...

汉化版PSAI全面测评,探索国产AI绘画软件的创新力量

引言 随着AI技术的飞速发展&#xff0c;图像处理和绘画领域迎来了新的变革。作为一名AIGC测评博主&#xff0c;今天我们测评的是一款国产AI绘画软件——StartAI&#xff0c;一句话总结&#xff1a;它不仅在技术上毫不逊色于国际大牌&#xff0c;更在用户体验和本地化服务上做到…...

LeetCode | 709.转换成小写字母

这道题可以用api也可以自己实现&#xff0c;都不难&#xff0c;大小字母之前相差了32&#xff0c;检查到大写字母时加上32即可 class Solution(object):def toLowerCase(self, s):""":type s: str:rtype: str"""return s.lower()class Solution…...

洗地机哪个品牌比较好?四款好用靠谱的优质洗地机推荐

随着现代生活节奏的加快&#xff0c;家庭清洁成了一项耗时且繁琐的任务。洗地机凭借其智能化和高效的清洁能力&#xff0c;越来越受到大家的青睐。然而&#xff0c;市场上各种品牌和型号琳琅满目&#xff0c;让人眼花缭乱。为了帮助大家在众多选择中找到心仪的产品&#xff0c;…...

java:spring actuator添加自定义endpoint

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89437274 # 项目代码 【pom.xml】 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId&…...

LeetCode88-删除有序数组中的重复项

题目 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 代…...

SpringBoot Starter 通用接口加密组件(防篡改)+ RequestBodyAdvice和ResponseBodyAdvice原理

防篡改&#xff1a; 如何保证接口安全&#xff0c;做到防篡改防重放&#xff1f;_接口防止串改-CSDN博客 接口安全设计之防篡改和防重放_接口防篡改机制-CSDN博客 参考博客&#xff1a; RequestBodyAdvice和ResponseBodyAdvice原理详解-CSDN博客 SpringBoot Starter 通用接口…...

delphi 如何使用TEdgeBrowser组件以及打包环境在其他主机上运行

不管开发环境还是第三方环境先安装运行时库&#xff1a;Microsoft Edge WebView2 | Microsoft Edge Developer 开发环境可以直接通过&#xff1a; delphi IDE安装 安装完毕后进入到指定路径&#xff0c;复制里面的WebView2Loader.dll到你要开发的程序根目录&#xff1a; 大致路…...

Sui的Fastcrypto加密库刷新速度记录

Sui使用的加密库Fastcrypto打破了许多速度记录&#xff0c;Mysten Labs在基准测试和安全分析中的工作修复了许多安全漏洞&#xff0c;同时通过识别新的优化技巧为创新开辟了道路。 最近在伦敦帝国理工学院举行的国际性能工程会议&#xff08;ICPE&#xff09;基准测试研讨会上…...

Malformed \uxxxx encoding或Maven server structure problem问题解决

问题描述&#xff1a; idea运行项目时, 报错如下: [ERROR] Malformed \uxxxx encoding. [ERROR] Maven server structure problem [ERROR] Malformed \uxxxx encoding. 解决方法总结 先说一下解决方法无非是下面几种 1、先检查项目的.properties、.yml 、pom.xml、logback等…...

Sui主网升级至V1.27.2版本

其他升级要点如下所示&#xff1a; 重点&#xff1a; #17245 增加了一个新的协议版本&#xff0c;并在开发网络上启用了Move枚举。 JSON-RPC #17245: 在返回的JSON-RPC结果中增加了对Move枚举值的支持。 GraphQL #17245: 增加了对Move枚举值和类型的支持。 CLI #179…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...