C/S架构学习之基于TCP的本地通信(客户机)

  • 基于TCP的本地通信(客户机):
  • 创建流程:
  • 一、创建字节流式套接字(socket函数):
	int sock_fd = socket(AF_LOCAL,SOCK_STREAM,0);
  • 二、创建客户机和服务器的本地网络信息结构体并填充客户机和服务器本地网络信息结构体 (struct sockaddr_un):
  • 本地网络信息结构体:
	#include <sys/un.h>struct sockaddr_un {sa_family_t sun_family;               //AF_LOCALchar        sun_path[108];            //pathname};
	//填充服务器和客户机网络信息结构体struct sockaddr_un serveraddr, clientaddr;socklen_t serveraddr_len = sizeof(serveraddr);socklen_t clientaddr_len = sizeof(clientaddr);memset(&serveraddr, 0, serveraddr_len);memset(&clientaddr, 0, clientaddr_len);serveraddr.sun_family = AF_LOCAL;clientaddr.sun_family = AF_LOCAL;strcpy(serveraddr.sun_path, "./tcpserver");  //tcpserver是一个套接字类型的文件strcpy(clientaddr.sun_path, "./tcpclient"); //tcpclient是一个套接字类型的文件
  • 三、客户机绑定字节流式套接字(bind函数):
	bind(sock_fd, (struct sockaddr *)&clientaddr, clientaddr_len);
  • 四、与服务器建立连接(connect函数):
	connect(sock_fd, (struct sockaddr *)&serveraddr, serveraddr_len);
  • 五、客户机端发收数据(send函数、recv函数):
		memset(buf, 0, sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf) - 1] = '\0';//给服务器发送消息int ret1 = send(sock_fd,buf,sizeof(buf),0);if(-1 == ret1){perror("send error");exit(-1);}memset(buf,0,sizeof(buf));//接收服务器的应答消息int ret2 = recv(sock_fd,buf,sizeof(buf),0);if(-1 == ret2){perror("recv error");exit(-1);}printf("服务器的应答消息[%s]\n",buf);
  • 六、关闭套接字(close函数):
	close(sock_fd);
  • 示例代码:
	#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/ip.h>#include <sys/un.h>#include <arpa/inet.h>#include <stdbool.h>int main(int argc, char const *argv[]){// 创建套接字int sock_fd = socket(AF_LOCAL, SOCK_STREAM, 0);if (-1 == sock_fd){perror("socket error");exit(-1);}// 填充客户机和服务器网络信息结构体struct sockaddr_un serveraddr, clientaddr;socklen_t serveraddr_len = sizeof(serveraddr);socklen_t clientaddr_len = sizeof(clientaddr);memset(&serveraddr, 0, serveraddr_len);memset(&clientaddr, 0, clientaddr_len);serveraddr.sun_family = AF_LOCAL;clientaddr.sun_family = AF_LOCAL;strcpy(serveraddr.sun_path, "./tcpserver");  //tcpserver是一个套接字类型的文件strcpy(clientaddr.sun_path, "./tcpclient"); //tcpclient是一个套接字类型的文件// 客户机绑定套接字if (-1 == bind(sock_fd, (struct sockaddr *)&clientaddr, clientaddr_len)){perror("bind error");exit(-1);}// 与服务器建立连接if (-1 == connect(sock_fd, (struct sockaddr *)&serveraddr, serveraddr_len)){perror("connect error");exit(-1);}char buf[128] = {0};int ret1 = 0;int ret2 = 0;// 提示信息printf("本地通信之TCP客户机成功连接服务器!!!\n");// 收发数据while (true){memset(buf, 0, sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf) - 1] = '\0';//给服务器发送消息int ret1 = send(sock_fd,buf,sizeof(buf),0);if(-1 == ret1){perror("send error");exit(-1);}memset(buf,0,sizeof(buf));//接收服务器的应答消息int ret2 = recv(sock_fd,buf,sizeof(buf),0);if(-1 == ret2){perror("recv error");exit(-1);}printf("服务器的应答消息[%s]\n",buf);}// 关闭套接字close(sock_fd);return 0;}
  • 运行结果:
	本地通信之TCP客户机成功连接服务器!!!hello服务器的应答消息[hello-------k]hi服务器的应答消息[hi-------k]I Love China!!!服务器的应答消息[I Love China!!!-------k]
  • 特别注意:
  • strcpy(serveraddr.sun_path,"./tcpserver");strcpy(clientaddr.sun_path, "./tcpclient");代码段中的tcpserver文件tcpclient文件套接字文件
  • 如下所示:
	srwxrwxr-x 1 linux linux     0 1110 05:58 tcpserversrwxrwxr-x 1 linux linux     0 1110 06:00 tcpclient

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

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

相关文章

Rust写的爬虫代码抓取精美的图片

Rust是一种系统级编程语言&#xff0c;它的设计目标是安全、并发和高效。Rust的爬虫库非常丰富&#xff0c;例如scraper、select、reqwest等等。这些库提供了许多功能&#xff0c;例如HTML解析、HTTP请求、异步处理等等&#xff0c;使得Rust成为一个非常适合编写爬虫的语言。 以…

Outlook如何删除邮箱账户

Outlook如何删除邮箱账户 说明&#xff1a; 最近有用户询问到“我的Outlook登陆了很多个邮箱账号&#xff0c;不知道怎么退出”接下来将具体操作步骤加以说明 操作指引&#xff1a; 1、首先打开Outlook该软件&#xff0c;然后点击“文件” 2、点击账户设置下拉菜单 3、在下拉…

windows HOOK学习(一)

了解HOOK 一&#xff1a;HOOK是什么&#xff1f;二&#xff1a;HOOK的分类三&#xff1a;HOOK的原理&#xff1f;四&#xff1a;为什么全局钩子HOOK必须写到DLL中&#xff1f;五&#xff1a;HOOK的类型 一&#xff1a;HOOK是什么&#xff1f; hook就是我们平时听到的钩子&…

【ATTCK】MITRE和CISA共同推出OT攻击模拟平台

一、MITRE和CISA共同推出OT攻击模拟平台 MITRE公司和美国网络安全和基础设施安全局&#xff08;CISA&#xff09;近日发布Caldera for OT&#xff0c;该平台可模拟针对工业操作系统&#xff08;OT&#xff09;的攻击。CALDERA是一套开源自动化攻击模拟平台&#xff0c;应用于MI…

ubuntu下迁移home目录至新的分区教程详解

ubuntu下迁移home目录至新的分区教程详解 前言 首先声明一下&#xff0c;因为此教程涉及到用户重要资料数据&#xff0c;所以操作前&#xff1a; 数据无价&#xff0c;请一定要先备份&#xff01;数据无价&#xff0c;请一定要先备份&#xff01;数据无价&#xff0c;请一定…

PCA(主成分分析)数据降维技术代码详解

引言 随着大数据时代的到来&#xff0c;我们经常会面临处理高维数据的问题。高维数据不仅增加了计算复杂度&#xff0c;还可能引发“维度灾难”。为了解决这一问题&#xff0c;我们需要对数据进行降维处理&#xff0c;即在不损失太多信息的前提下&#xff0c;将数据从高维空间…

NFTScan | 11.06~11.12 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.11.06~ 2023.11.12 NFT Hot News 01/ 《辛普森一家》提及 NFT 及区块链&#xff0c;相关 NFT 地板价涨至 0.35 ETH 11 月 6 日&#xff0c;据 Coindesk 报道&#xff0c;美国时间周…

thinkphp8 数据库的连接

账号&#xff1a;root 密码&#xff1a;自己设置 http://localhost:888/index.php当出现这个并且能登陆就算成功了。 回到项目config/database.php .env 里面&#xff08;如果已经.example.env 改成了.env,则改下边&#xff0c;db_name改成你的数据库表名&#xff09; 多个…

HTTP服务器——tomcat的安装和使用

文章目录 前言下载tomcattomcat 文件bin 文件夹conf 文件lib 文件log 文件temp 文件webapps 文件work 目录 如何使用 tomcat 前言 前面我们已经学习了应用层协议 HTTP 协议和 HTTP 的改进版——HTTPS&#xff0c;这些协议是我们在写与服务器相关的代码的时候息息相关的&#x…

监控视频片段合并完整视频|FFmpeg将多个视频片段拼接完整视频|PHP自动批量拼接合并视频

关于环境配置ffmpeg安装使用的看之前文章 哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频 <?php date_default_timezone_set("PRC"); header("Content-type: text/html; charsetutf-8"); set_time_limit(0);// 遍历获取文件 functi…

微服务面试题

微服务面试题 文章目录 微服务面试题微服务微服务面试题 微服务 微服务是一种软件开发的方法&#xff0c;它将一个大型的应用程序分解为多个小型的、独立的服务&#xff0c;每个服务都有自己的功能、技术栈和数据库。微服务之间通过网络协议&#xff08;如 HTTP、消息队列等&a…

STM32两轮平衡小车原理详解(开源)

一、引言 关于STM32两轮平衡车的设计&#xff0c;我想在读者阅读本文之前应该已经有所了解&#xff0c;所以本文的重点是代码的分享和分析。至于具体的原理&#xff0c;我觉得读者不必阅读长篇大论的文章&#xff0c;只需按照本文分享的代码自己亲手制作一辆平衡车&#xff0c…

响应式摄影科技传媒网站模板源码带后台

模板信息&#xff1a; 模板编号&#xff1a;540 模板编码&#xff1a;UTF8 模板颜色&#xff1a;黑白 模板分类&#xff1a;摄像、婚庆、家政、保洁 适合行业&#xff1a; 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手…

[WSL] 安装hive3.1.2成功后, 使用datagrip连接失败

org.apache.hadoop.ipc.RemoteException:User: xxx is not allowed to impersonate anonymous 下载driver-hive-jdbc-3.1.2-standalone 解决 修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项 <property><name>hadoop.proxyuser.你的用户名.hosts…

跨越编程界限:C++到JavaSE的平滑过渡

JDK安装 安装JDK 配置环境变量&#xff1a; Path 内添加 C:\Program Files\Java\jdk1.8.0_201\bin 添加 JAVA_HOME C:\Program Files\Java\jdk1.8.0_201 添加 CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 第一个Java程序 HelloWorld.java public class…

Linux之gdb

gdb就是一个Linux的调试工具&#xff0c;类似与vs里面的调试 可执行程序也有格式&#xff0c;不是简单的二进制堆砌

软件测试 | 测试用例编写思路

文章目录 用例编写 用例编写 用例名称&#xff1a;【版本号】页面-页面&#xff0c;功能校验所属模块&#xff1a;2023年/一季度/版本号前置条件&#xff1a; 用户登录管理后台依次点击菜单&#xff1a;仓库管理—员工管理 步骤描述&#xff1a; 点击 [] 按钮 1.1.1 1.2.2 点…

Excel函数-将A1中的字符串剔除B1中的字符串

比如A2中是类型单位&#xff0c;B2中是单位&#xff0c;在C2中体现A2-B2的结果&#xff0c;即大米 公式&#xff1a;SUBSTITUTE(A2,B2,“”) SUBSTITUTE函数功能&#xff1a;将字符串中的部分字符用新字符替换&#xff0c;替换序号忽略说明进行全部替换 结构&#xff1a;SUB…

Android unable to find valid certification path to requested target

Android Studio 无法联网解决方法 在开发 Android 应用时&#xff0c;经常需要使用 Android Studio 进行开发和调试。然而&#xff0c;有时候我们可能会遇到 Android Studio 无法联网的问题&#xff0c;这会导致无法下载依赖库、更新 SDK 等操作。在本文中&#xff0c;我将向你…

01-解码-H264转YUV

整体方案&#xff1a; 采集端&#xff1a;摄像头采集&#xff08;YUV&#xff09;->编码&#xff08;YUV转H264&#xff09;->RTMP推流 客户端&#xff1a;RTMP拉流->解码&#xff08;H264转YUV&#xff09;->YUV显示&#xff08;SDL2&#xff09; H264码流转YUV是…