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

网络编程学习

思维导图

 代码练习

TCP实现通信

服务器端代码

#include <myhead.h>
#define SER_IP "192.168.152.135"
#define SER_PORT 8910
int main(int argc, const char *argv[])
{//1创建用于监听的套接字int sfd = -1;sfd =socket(AF_INET,SOCK_STREAM,0);if(sfd==-1){perror("socket error");return -1;}printf("sfd = %d\n",sfd);//2绑定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);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");return -1;}printf("listen success\n");//4当有客户端发来连接请求后创建新的用于通信的套接字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 =read(newfd,rbuf,sizeof(rbuf));if(res==0){printf("客户端已经下线\n");break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);strcat(rbuf," O_o");write(newfd,rbuf,strlen(rbuf));}//6关闭套接字close(newfd);close(sfd);return 0;
}

客户端代码

#include <myhead.h>
#define SER_IP "192.168.152.135"
#define SER_PORT 8910
int main(int argc, const char *argv[])
{//1创建用于通信的套接字文件描述符int cfd = -1; cfd =socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){                                                                                                 perror("socket error");return -1; }   printf("cfd = %d\n",cfd);
//2连接服务器struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//数据收发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);}close(cfd);return 0;
}

效果图

UDP实现通信

服务器端代码

#include <myhead.h>
#define SER_IP "192.168.152.135"
#define SER_port 8910
int main(int argc, const char *argv[])
{int sfd=socket(AF_INET,SOCK_STREAM,0);if(sfd==-1){perror("socket error");return -1;}printf("socket success\n");//绑定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);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," O_o");if(sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,socklen)==-1){perror("sendto error");return -1;}}close(sfd);return 0;
}

 客户端代码

#include <myhead.h>
#define SER_IP "192.168.152.135"
#define SER_PORT 8910
int main(int argc, const char *argv[])
{int cfd=socket(AF_INET,SOCK_DGRAM,0);if(cfd==-1){perror("socket error");return -1;}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;
}

效果图

相关文章:

网络编程学习

思维导图 代码练习 TCP实现通信 服务器端代码 #include <myhead.h> #define SER_IP "192.168.152.135" #define SER_PORT 8910 int main(int argc, const char *argv[]) {//&#xff11;创建用于监听的套接字int sfd -1;sfd socket(AF_INET,SOCK_STREAM,0)…...

centos物理电脑安装过程(2024年1月)

开机时&#xff1a;CtrlAltDelete键重启电脑 重启开始时&#xff1a;按F11&#xff0c;桌面弹出蓝色框&#xff0c;选择第二个SSK SFD142 1.00&#xff0c;回车 选择install centos7安装 选择后弹出选择安装选项&#xff0c;选择语言 连接无线网络 安装设置&#xff0c;选择磁…...

Web自动化测试平台开发---Automated_platform

一、项目简介 历时一个假期&#xff0c;Automated_platform 第一版完工&#xff0c;是一款基于po模式的自动化测试平台,采用后端技术为DjangoceleryRabbitMQmysql 配置mysql数据库&#xff0c;进行数据迁移后&#xff0c;运行项目后&#xff0c;即可成功访问http://127.0.0.1:8…...

mybatis-plus: 多租户隔离机制

文章目录 一、TenantLineHandler1、介绍2、包含的方法 二、简单实例三、实践1、实现TenantLineHandler接口 一、TenantLineHandler 1、介绍 TenantLineHandler 是 Mybatis-Plus 中用于处理多租户的接口&#xff0c;用于实现多租户数据隔离的具体逻辑。通过实现这个接口&#…...

用Socks5代理游戏,绕过“网络海关”去探险

1. 出海大冒险的开始 在游戏世界&#xff0c;就像在现实生活中一样&#xff0c;有时我们需要越过海洋去探索未知的世界。但是&#xff0c;网络上也有一些“海关”&#xff0c;限制我们访问某些网站或游戏服务器。这就是我们今天要克服的挑战&#xff01; 2. Socks5代理&#xf…...

SpringBoot整合rabbitmq-直连队列,没有交换机(一)

说明&#xff1a;本文章只是springboot和rabbitmq的直连整合&#xff0c;只使用队列生产和消费消息&#xff0c;最简单整合&#xff01; 工程图&#xff1a; A.总体pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://…...

CUDA C:查看GPU设备信息

相关阅读 CUDA Chttps://blog.csdn.net/weixin_45791458/category_12530616.html?spm1001.2014.3001.5482 了解自己设备的性能是很有必要的&#xff0c;为此CUDA 运行时(runtime)API给用户也提供了一些查询设备信息的函数&#xff0c;下面的函数用于查看GPU设备的一切信息。 …...

深度学习如何入门?——从“小白”到“大牛”的深度学习之旅

大家好&#xff0c;今天我要和大家分享的主题是“深度学习如何入门”。深度学习作为人工智能领域的重要分支&#xff0c;已经取得了许多令人瞩目的成果。然而&#xff0c;对于初学者来说&#xff0c;深度学习可能显得有些神秘和难以入手。那么&#xff0c;如何才能快速入门深度…...

编译 qsqlmysql.dll QMYSQL driver not loaded

Qt 连接MySQL数据库&#xff0c;没有匹配的qsqlmysql.dll, 需要我们跟进自己Mysql 以及QT版本自行编译的。异常如下图&#xff1a; 安装环境为 VS2019 Qt5.12.12&#xff08;msvc2017_64、以及源码&#xff09; 我的安装地址&#xff1a;D:\Qt\Qt5.12.12 Mysql 8.1.0 默认安…...

Android日历提醒增删改查事件、添加天数不对问题

Android日历提醒是非常好的提醒功能&#xff0c;笔者在做的过程中&#xff0c;遇到的一些问题&#xff0c;现整理出来&#xff0c;以供参考。 一、申请日历的读写权限 <uses-permission android:name"android.permission.WRITE_CALENDAR" /> <uses-permiss…...

【力扣hot100】刷题笔记Day15

前言 今天要刷的是图论&#xff0c;还没学过&#xff0c;先看看《代码随想录》这部分的基础 深搜DFS理论基础 深搜三部曲 确认递归函数、参数确认终止条件处理目前搜索节点出发的路径 代码框架 void dfs(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本节点…...

vue-显示数据

​ v-text和v-html专门用来展示数据, 其作用和插值表达式类似。v-text和v-html可以避免插值闪烁问题. ​ 当网速比较慢时, 使用{{}}来展示数据, 有可能会产生插值闪烁问题。 ​ 插值闪烁: 在数据未加载完成时&#xff0c;页面会显示出原始的{{}}, 过一会才会展示正常数据.语法…...

kali linux常用命令

1. 网络扫描 功能&#xff1a;网络扫描是用来发现网络中的设备、服务和开放端口的过程。 命令&#xff1a;nmap 例子&#xff1a;nmap -sP 192.168.1.0/24 这个命令使用 Nmap 进行网络扫描&#xff0c;列出 192.168.1.0/24 网段中的所有活跃主机。 2. 密码破解 功能&#xf…...

HTML5:七天学会基础动画网页4

backgorund-size 值与说明 length(单位像素):设置背景图片高度和宽度&#xff0c;第一个值设置宽度&#xff0c;第二个值设置高度&#xff0c;如果只给出一个值&#xff0c;第二个是设置为auto。 percentage(百分比):以父元素的百分比来设置背景图像的宽度和高度&#xff0c…...

Web安全之接口鉴权

目录 接口鉴权定义 为什么会有cookie还有session还有token这种技术的存在?...

shardingsphere 集成springboot【水平分表】

创建sharding_sphere数据库 在数据库中创建两张表&#xff0c;t_order_1和t_order_2 分片规则&#xff1a;如果订单编号是偶数添加到t_order_1,如果是奇数添加到t_order_2 创建实体类 public class Order { private Integer id; private Integer orderType; private Int…...

GO 的 Web 开发系列(六)—— 遍历路径下的文件

文件 IO 处理是程序的基础功能&#xff0c;WEB 程序中通过文件 IO 实现附件的上传与下载。在 GO 中&#xff0c;有多种方式可以遍历文件目录&#xff0c;获取文件路径&#xff0c;本文从使用层面上论述这些函数。 预先准备一个包含子目录的目录&#xff0c;用于遍历测试&#…...

Flutter 处理异步操作并根据异步操作状态动态构建界面的方法FutureBuilder

概述 当界面的内容需要依靠网络请求的数据&#xff0c;就需要处理苦恼的&#xff0c;状态是空&#xff0c;非空的逻辑了&#xff0c;不然页面构建可能会报错&#xff0c;而FutureBuilder提供了一个非常好的解决方法&#xff0c;直接看代码 代码 异步操作函数 即网络请求函数…...

Git教程-Git的基本使用

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

Java解决长度为K子的数组中的的最大和

Java解决长度为K子的数组中的的最大和 01 题目 给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和&#xff1a; 子数组的长度是 k&#xff0c;且子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子…...

优化Vscode终端缓冲区设置:突破历史记录限制的实用技巧

1. 为什么你的Vscode终端总是丢失历史记录&#xff1f; 每次在Vscode终端里调试代码时&#xff0c;最让人抓狂的就是向上翻看历史记录时突然卡住&#xff0c;发现前面的输出内容全都消失了。这个问题我遇到过无数次&#xff0c;特别是在跑长时间任务或者输出大量日志时。其实这…...

备忘录笔记

随便写点小知识按位或&#xff1a; |&#xff0c; 按位与&#xff1a;&...

Leetcode704 二分查找(数组)

# 这里是二分查找&#xff0c;题目当中 只给出了 n个 升序 整型 数组nums&#xff0c;目标变量名称是 target&#xff0c;# 要求 存在返回 下标&#xff0c;不存在 返回 -1&#xff0c;时间复杂度O(logn)class Solution(object):def search(self, nums, target):""&q…...

LVS 基线检查与安全加固指南(附案例)

一、LVS 安全基线检查表类别检查项安全要求检查方法主机安全操作系统补丁最新安全补丁yum check-update \| grep kernelSSH 安全加固密钥认证非标准端口netstat -tuln \| grep ssh网络配置VIP 绑定限制绑定特定内网接口ip addr showARP 抑制启用禁用 arp_announce/arp_ignoresy…...

KUKA KRC4柜子‘扩容’指南:从WorkVisual配置看如何为机器人增加第9个轴

KUKA KRC4控制柜轴扩展实战&#xff1a;突破8轴限制的硬件配置与WorkVisual优化策略 在工业机器人系统集成领域&#xff0c;KUKA KRC4控制柜作为主流控制器&#xff0c;其标准配置通常支持最多8个轴的驱动。然而&#xff0c;随着产线复杂度提升和工艺需求多样化&#xff0c;9轴…...

保姆级教程:手把手教你为小智AI Pro更换专属唤醒词和背景图(ESP32-S3实战)

保姆级教程&#xff1a;手把手教你为小智AI Pro更换专属唤醒词和背景图&#xff08;ESP32-S3实战&#xff09; 刚拿到小智AI Pro开发板时&#xff0c;最让人兴奋的莫过于能打造属于自己的智能语音助手。想象一下&#xff0c;当你说出"嘿&#xff0c;贾维斯"就能唤醒…...

告别裸机联网:在STM32F407上基于FreeRTOS和LwIP实现多任务TCP通信(CubeMX配置详解)

从裸机到RTOS&#xff1a;STM32F407网络通信实战指南 在嵌入式开发领域&#xff0c;从裸机编程转向RTOS系统是一个关键的进阶步骤。对于需要同时处理传感器数据采集和网络通信的智能设备项目&#xff0c;裸机轮询架构很快就会遇到性能瓶颈和代码复杂度问题。本文将带你深入探索…...

三电阻采样进阶技巧:如何通过PWM动态移相突破FOC控制电压限制

三电阻采样进阶技巧&#xff1a;PWM动态移相突破FOC电压限制的工程实践 在无人机电机和电动汽车驱动系统中&#xff0c;工程师们常常面临一个棘手的矛盾&#xff1a;既要保证电流采样精度&#xff0c;又要最大化电源利用率。传统限幅方案就像给赛车手绑上沙袋——安全却限制了性…...

C++加餐课-stack_queue:计算器-逆波兰表达式

1. 计算器实现思路 • 150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; • 224. 基本计算器 - 力扣&#xff08;LeetCode&#xff09; • 我们日常写的计算表达式都是中缀表达式&#xff0c;也就是运算符在中间&#xff0c;运算数在两边&#xff0c;但是直…...

Kali Linux 2024.1 上 Zsh + Oh My Zsh 保姆级配置指南(含国内网络加速方案)

Kali Linux 2024.1 极速配置 Zsh Oh My Zsh 全攻略 作为安全研究人员和开发者的标配系统&#xff0c;Kali Linux 在2024.1版本中已经全面拥抱Zsh作为默认Shell。但国内用户在配置过程中最头疼的莫过于Oh My Zsh的安装问题——那些看似简单的curl命令总是因为网络问题而失败。本…...