socket TCP编程模型实例1

基于TCP的Socket编程      TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。在使用TCP协议传输数据,接收端收到的是一个和发送端完全一样的数据流。发送端和接收端必须建立联系,以便在TCP协议基础上进行通讯,其端口之间建立连接,一... 阅读详情
功能需求:将本地文件夹下的source文件通过TCP备份到远程服务器
运行环境:unbuntu

客户端代码:
 1 #include <stdio.h>
  2 #include <fcntl.h>
  3 #include <stdlib.h>
  4 #include <string.h>
  5 #include <sys/socket.h>
  6 #include <netinet/in.h>
  7 #include <arpa/inet.h>
  8 
  9 //tcp客户端
 10 int main()
 11 {
 12     //1. 准备socket
 13     FILE* FP=fopen("source","r");
 14     int sockfd=socket(PF_INET,SOCK_STREAM,0);
 15     if(sockfd==-1)perror(""),exit(-1);
 16     //2. 准备地址
 17     struct sockaddr_in addr;
 18     addr.sin_family = PF_INET;
 19     addr.sin_port = htons(8888);
 20     inet_aton("127.0.0.1",&addr.sin_addr);
 21     //3.连接
 22     int res = connect(sockfd,(struct sockaddr*)&addr, sizeof(addr));
 23     if(res==-1)perror("连接失败"),exit(-1);
 24     printf("连接成功\n");
 25     //4.通信,发送文件名
 26     send(sockfd, "source", 12, 0);
 27     char buf[1024] = {};
 28     //5.循环读取文件的每一行并发送给服务端
 29     int count=1;
 30     while(fgets(buf,sizeof(buf),FP)){
30     while(fgets(buf,sizeof(buf),FP)){
 31         printf("第%d行:%s",count,buf);
 32         send(sockfd,buf,sizeof(buf),0);
 33         count++;
 34     }
 35     send(sockfd,"finished",strlen("finished"),0);
 36     memset(buf,0,sizeof(buf));
 37     recv(sockfd, buf, sizeof(buf), 0);
 38     printf("服务端应答:%s\n", buf);
 39     //5.关闭
 40     shutdown(sockfd,SHUT_RDWR);
 41     close(sockfd);
 42 }


服务端代码:
 
 1 #include <stdio.h>
  2 #include <time.h>
  3 #include <stdlib.h>
  4 #include <unistd.h>
  5 #include <fcntl.h>
  6 #include <string.h>
  7 #include <sys/socket.h>
  8 #include <netinet/in.h>
  9 #include <arpa/inet.h>
 10 
 11 //tcp服务端
 12 int main()
 13 {
 14     //1. 准备socket
 15     int sockfd=socket(PF_INET,SOCK_STREAM,0);
 16     if(sockfd==-1)perror(""),exit(-1);
 17     //2. 准备地址
 18     struct sockaddr_in addr;
 19     addr.sin_family = PF_INET;
 20     addr.sin_port = htons(8888);
 21     inet_aton("127.0.0.1",&addr.sin_addr);
 22     //3.绑定
 23     int res = bind(sockfd,(struct sockaddr*)&addr, sizeof(addr));
 24     if(res==-1)perror("绑定失败"),exit(-1);
 25     printf("绑定成功\n");
 26     //4.侦听
 27     res=listen(sockfd,100);
 28     if(res == -1)perror("监听失败"),exit(-1);
 29     printf("启动侦听\n");
 30 
 31     struct sockaddr_in cliaddr;
 32     socklen_t len = sizeof(cliaddr);
 33     //5.接受连接
 34     int fd=accept(sockfd,(struct sockaddr*)&cliaddr,&len);
 35     //6.接受文件名
 36     char buf[100]={};
 37     recv(fd,buf,sizeof(buf),0);
 38     char path[256]={};
 39     sprintf(path,"bak/%s",buf);
 40     int sfd=open(path,O_RDWR|O_CREAT|O_APPEND,00755);
 41     if(sfd==-1)
 42         printf("\n%m,\nline:%d\n",__LINE__),exit(-1);
 43 
 44     //7.循环接受文件内容,接受到空字符时退出
 45     while(1){
 46         memset(buf,0,sizeof(buf));
 47         if(recv(fd,buf,sizeof(buf),0)<=0)
 48             perror("接收数据终止"),exit(-1);
 49        else if(!strcmp(buf,"finished")){
 50             break;
 51         }
 52         else{
53             write(sfd,buf,sizeof(buf));
 54         }
 55     }
 56     printf("接收完毕\n");
 57     memset(buf,0,sizeof(buf));
 58     time_t cur;
 59     time(&cur);
 60     struct tm* cur_tm=localtime(&cur);
 61     sprintf(buf,"接收成功,接收时间:%4d-%02d-%02d %02d:%02d:%02d",cur_tm->tm_year+1900,cur_tm->tm_mon+1,cur_tm->tm_mday,cur_tm->tm    _hour,cur_tm->tm_min,cur_tm->tm_sec);
 62     send(fd,buf,strlen(buf),0);
 63     close(fd);
 64     close(sockfd);
 65 }
 66 
 
缺陷与不足:不支持多个客户端同时操作,在下一个版再添加多进程处理。
ROS2通过ros2_socketcan实现CAN总线高效数据过滤与多节点通信 本文详细解析了ROS2通过ros2_socketcan实现CAN总线高效数据过滤与多节点通信的技术方案。文章重点探讨了CanFilterList的工作原理、多过滤器组合使用及动态配置策略,有效解决了工业应用中CAN总线数据过载问题,显著降低了CPU负载并提升了系统实时性。 阅读详情

相关推荐

Dify Rerank 模型配置全流程解析:从报错定位到代码实现

Dify Rerank 模型配置全流程解析:从报错定位到代码实现

engchina的专栏 4470

TCP Socket的编程模型

综述 Java为TCP提供了用于客户端的Socket类,和用于服务器端的ServerSocket类,为什么要学习这个东西?平时用的东西都被tomcat等服务器封装了,而看不到底层的信息,课堂上老师要求基于socket来编写c/s架构的分布式系统,以了解一下服务器底层的实现细节。因此,本篇文章用来总结一下TCP Socket的一些基本的使用方法与搭建细节。 Socket Socke

Well's Column 1408

旅行青蛙破解汉化教程——蹭个热度

汉化破解版资源(无尽三叶草与点券): https://github.com/wisdombyzf/lxqw/blob/master/lxqw_zf.apk 截图: 破解方法: 工具: 1,APKIDE https://www.pd521.com/thread-818-1-2.html 2,dnspy https://down.52pojie.

github_38838414的博客 3785

linux网络编程-TCP socket编程模型

1. 编程模型 三次握手 + 四次挥手 2.主要函数说明 字节序转换函数: #include &lt;arpa/inet.h&gt; uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntoh...

SuperYang_的博客 758

别再为PT100测温发愁了!手把手教你用ADS1247+STM32搞定高精度温度采集(附完整代码)

本文详细介绍了如何使用ADS1247与STM32构建高精度PT100测温系统,涵盖硬件设计、SPI配置、温度计算及调试技巧。通过24位ADC和内置PGA,实现0.1℃级精度,适用于工业自动化和医疗设备。附完整代码和常见问题解决方案,助你快速掌握高精度温度采集技术。

weixin_42524703的博客 344

物联网开发131 - Micropython ESP32 C3连接TB6600驱动42BYGH39步进电机

如何使用合宙ESP32 C3连接TB6600驱动42BYGH39步进电机,实现控制步进电机正反转和旋转指定角度等

zhusongziye的博客 2372

7种网络编程I/O模型代码实现实例

部分代码参考《[WINDOWS网络与通信程序设计].王艳平》,网络中一些I/O模型的代码都没有对socket是否可写做过深入研究,我这边会提供一些解决方法。 阻塞模式下,send会发生阻塞(非阻塞模式下send返回WSAEWOULDBLOCK错误,重叠I/O下表现为投递的发送请求一直无法完成)的情况一般可以分为3种 :  1,  服务器虽然发送了大量数据,但客户端并未调用recv函数去

lishenglong666的专栏 803

LS-DYNA超高速碰撞仿真入门:从SPH算法配置到铝靶板穿孔分析(附K文件模板)

本文详细介绍了使用LS-DYNA中的SPH(光滑粒子流体动力学)算法进行超高速碰撞仿真的完整流程。以铝弹丸撞击铝靶板为例,从SPH算法原理、LS-PrePost前处理、材料模型与状态方程设置,到接触定义、边界条件及K文件生成,提供了系统的入门指导和关键参数调试经验,帮助工程师高效模拟材料破碎、穿孔等极端变形问题。

h0i1j2k3l的博客 726

实例解析SOCKET编程模型

      Socket(套接字)是一种独立于协议的网络编程接口,在OSI模型中,主要集中于会话层和传输层。Socket 实际上代表的是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均

835

Nifi SNI 问题解决方案

Nifi 在配置 SSL 时,如果没有正确设置主机名(SNI),就会导致。为了解决这个问题,我们需要重新配置 Nifi 的 SSL 证书,并确保所有相关配置项(如服务器地址、证书路径和密码等)正确无误。以下是一个详细的解决步骤,以帮助你正确配置 Nifi 并解决 SNI 错误。文件中的配置项(如服务器地址、端口和证书路径),以及正确设置用户凭证。通过这些配置,你可以确保 Nifi 在支持 HTTPS 的同时,正确处理 SSL/TLS 的 SNI 问题。文件,配置服务器地址、端口以及证书路径和密码。

m0_58786911的博客 2296

AUTOSAR知识点 之 XCP (二):XCP基础概念

学习XCP的过程中,对XCP的基本概念要做一个全面的认知,因为里面有很多缩写以及难以理解的点,假设对此模模糊糊一知半解,那么对整个协议栈的认知会遇到极大的障碍。XCP的信号流传输图示如下XCP 标准主要分为 5 个部分:这部分提供了对于协议的一个概况介绍,包括 XCP 的功能和基础性内容。这部分内容对协议层进行了详细的规范和说明。

梦想技术家 2769

TCP/UDP的Socket编程接口详解

基于TCP(面向连接)的socket编程,分为客户端和服务器端。服务器端的流程如下:(1)创建套接字(socket)(2)将套接字绑定到一个本地地址和端口上(bind)(3)将套接字设为监听模式,准备接收客户端请求(listen)即等待客户端调用connect().(4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)(5)用返回的套接字和客户端进行...

dongyanxia1000的专栏 2万+

使用R语言获取data.frame中指定列的数据

这里以"df"为例,包含三列数据:“列1”、“列2"和"列3”。通过以上代码,我们成功获取了"列1"和"列3"的数据,并将它们分别存储在了变量"column1"和"column3"中。假设我们有一个名为"df"的data.frame,其中包含了多个列,我们想要提取其中的某一列。符号,我们可以从data.frame中提取出"列2"的数据,并将其赋值给变量"column2"。符号,我们可以轻松提取出data.frame中特定列的数据,并将其存储在变量中供进一步的分析和处理使用。假设我们要获取"列2"的数据。

DevRevolt的博客 2321

【socket编程】TCP、UDP通信总结

一、什么是socket? Socket的英文原义是“孔”或“插座”。在编程中,Socket被称做 套接字,是网络通信中的一种约定。Socket编程的应用无处不在,我们平时用的QQ、微信、浏览器等程序,都与Socket编程有关。我们平时使用浏览器查资料,这个过程的技术原理是怎样的呢? 我们平时使用浏览器,大致就是这样的一个过程。这里有两个重要的名词: 服务端与 客户端。 Socket编程的目的就是如何实现这两端之间的通信。 1、Socket编程在嵌入式中也很重要 Socket编程不仅仅在互联网方面很重要,在我

果果小师弟的博客 4772

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JAVA 通过 Socket 实现 TCP 编程

简介 所谓socket 通常也称作"**套接字**",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常**通过"套接字"向网络发出请求或者应答网络请求**。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。**ServerSocket用于服务器端,Socket是建立网络连接时使用的**。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成

王者之峰 12万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Socket编程详解:从基本概念到实例应用(TCP|UDP C语言实例详解)

Socket编程详解:从基本概念到实例应用

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# Socket/TCP 及Socket编程

Socket相关的内容 什么是Socket 在计算机通信领域,Socket被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过Socket这种约定,一台计算机可以接收到其他计算机的数据,也可以向其他计算机发送数据。 Socket的本质 Socket的本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这个就是Scoket编程接...

Cocksuck的博客 3898

Java 基于 TCP 的 Socket 编程

服务器端会主动监听某个指定的端口,客户端必须主动连接服务器的 IP 地址和指定端口,如果连接成功,服务器端和客户端就成功地建立了一个 TCP 连接,双方后续就可以随时发送和接收数据。TCP 协议,指传输控制协议(TCP,Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。注意:服务端需要先于客户端启动,否则客户端因连接不到指定的进程而报错。实际场景中,一个服务端往往可以支持多个客户端的连接,为多个客户端提供服务。

swadian2008的博客 4495

基于socket网络编程技术实现TCP和UDP的流程详解及实例

具体函数讲解太多,根据程序自行分析。 可以参考这篇文章: https://blog.youkuaiyun.com/qq_41687938/article/details/119102328?spm=1001.2014.3001.5501 https://blog.youkuaiyun.com/weixin_42193813/article/details/105666316 一、socket 1.1 socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用

qq_41687938的博客 1万+

【Linux网络】Socket 编程TCP

💬 hello!各位铁子们大家好哇。今日更新了Linux网络编程的内容。

qinjh_的博客 3725

Socket网络编程:TCP与UDP

socket网络编程:TCP与UDP

Edward2022的博客 8924

网络编程 socket——TCP

服务端运行后,通过netstat命令可以查看到一个程序名为tcp_server的服务程序,它绑定的端口就是1024,而由于服务器绑定的是INADDR_ANY,因此该服务器的本地IP地址是0.0.0.0,这就意味着该TCP服务器可以读取本地任何一张网卡里面的数据。但在这个客户端正在享受服务端的服务时,我们让另一个客户端也连接服务器,此时虽然在客户端显示连接是成功的,但这个客户端发送给服务端的消息既没有在服务端进行打印,服务端也没有将该数据回显给该客户端。

jingfeng514的博客 2069

Linux下TCP Socket编程实例

client.c #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <arpa/inet.h> ...

托卡马克 1万+

socket编程与TCP协议

Socket是网络通信的“接口”,也就是程序与网路之间的中介。它为开发者提供了一套通用的函数或API,允许程序通过网络发送和接收数据。具体地说,socket抽象了网络底层的细节。比如数据包的传输、协议选择、错误处理等,开发者只需要使用socket提供的函数来建立连接和传输数据,而不需要关心网络底层的实现socket的特点UDP协议在网络编程中通过函数设置选项,主要涉及SOL_SOCKET(通用套接字层)和(UDP协议层)两类选项。

逃离世界····· 1452

Tcp协议Socket编程

  本次socket编程需要使用到 日志文件,此为具体日志编写过程。以及 线程池,线程池原理比较简单,看注释即可。 文章目录:Tcp协议Socket编程    TCP Socket API简介    构建Tcp_echo_server       TcpServer服务器端       服务器循环控制       Service服务       Tcp客户端      Version 0:单进程服务       Version 1: 多进程服务       Version 2: 多线程服务       Ve

欢迎来到阿熊的blog~~ 1383

Windows下C语言的基于TCP的Socket编程

Windows下C语言的基于TCP的Socket编程 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 注意在windows平台是需要winsock2.h头文件的,不像在linux平台的socket编程,mac的话是有些问题满意后有时间就来解决一下 必须记载动态链接库:ws2_32.lib 如果你用的是Clion,里面...

归子莫的博客 2722
上一篇: strncmp、strncpy、strncat、strlen库函数的实现
下一篇: python中文编码问题
CharliePeng2016
博客等级 码龄18年 25粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值