linux下tcp编程

Linux下TCP编程 服务器端在Linux环境下。 Server.cpp #include //#include using namespace std; enum{PORT=12345}; #ifdef _WIN32 //windows下 #include typedef int socklen_t; #else //Linux下 #include #include #include # 阅读详情

今天比较闲,玩一下linux下的TCP编程,下面是具体实现以及对TCP编程的具体总结。

以下是TCP步骤

服务器端 :                           客户端:
socket()                              socket()
bind()                                 connect()                   
listen()                                send/recv()/write()/read()                                       
accept()                              close()
send/recv()/write()/read()
close()      

服务端实现:

#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/ioctl.h>
#include<string.h>

int main()
{
    //创建一个socket
    int listenSocket=socket(AF_INET,SOCK_STREAM,0);
    
    //配置ip port 协议
    struct sockaddr_in addrSrc,addrClient;
    addrSrc.sin_family=AF_INET;
    addrSrc.sin_port=htons(6666);
    addrSrc.sin_addr.s_addr=INADDR_ANY;

    //绑定
    bind(listenSocket,(struct sockaddr*)&addrSrc,sizeof(struct sockaddr_in));

    //监听
    listen(listenSocket,5);

    int connfd=0;
    int len=sizeof(struct sockaddr_in);
    connfd=accept(listenSocket,(struct sockaddr*)&addrClient,&len);
    char *ipStr=inet_ntoa(addrClient.sin_addr);
    printf("connect is %s\n",ipStr);

    char sendBuf[100]="hello client!";
    //发送信息到客户端
    send(connfd,sendBuf,strlen(sendBuf)+1,0);
    
    while(1)
    {
        //接收客户端信息
        char recvBuf[100]={0};
        int ret=recv(connfd,recvBuf,sizeof(recvBuf)-1,0);
        if(0==ret)
        {
            printf("%s is leave!\n",ipStr);
            break;
        }
        char printBuf[1024]={0};
        //字符串拼接
        sprintf(printBuf,"from %s: %s",ipStr,recvBuf);
        puts(printBuf);
    }
    
    //关闭套接字
    close(connfd);
    close(listenSocket);
    
    return 0;
}
​

客户端实现:

#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/ioctl.h>
#include<string.h>
 
int main()
{
    //创建一个socket
    int clientSocket=socket(AF_INET,SOCK_STREAM,0);
    
    //配置ip port 协议
    struct sockaddr_in addrSrc;
    memset(&addrSrc,0,sizeof(struct sockaddr_in));

    addrSrc.sin_family=AF_INET;
    addrSrc.sin_port=htons(6666);
    addrSrc.sin_addr.s_addr=inet_addr("127.0.0.1");
 
    connect(clientSocket,(const struct sockaddr *)&addrSrc,sizeof(struct sockaddr_in));
    
    //接受信息    
    char recvBuf[1024]={0};
    recv(clientSocket,recvBuf,sizeof(recvBuf)-1,0);
    printf("recv from server is :%s\n",recvBuf);
    
    while(1)
    {    
        //发送信息
        char sendBuf[100]={0};
        scanf("%s",sendBuf);
        send(clientSocket,sendBuf,strlen(sendBuf)+1,0);
    }
    
    //关闭套接字
    close(clientSocket);
    
    return 0;
}

个人理解与总结:

1、struct sockaddr_in是ipv4地址的结构体,一般1024以内的端口不要使用,因为可能是系统端口。

2、如果TCP通信突然断开连接,然后再次运行程序的时候提示绑定失败,原因是linux限制了同一个端口号的绑定时间间隔。这时候有两种方法可以解决:一是换端口号,如果不是传参的话就得重新编译。二是通过setsockopt()接口来取消端口绑定的限制;以下是实现代码:

​int opt = 1;
if (setsockopt(tcpsock, SOL_SOCKET, SO_REUSEADDR, &opt,sizeof(opt)) < 0) 
{
    perror("setsockopt error");    
} 

​

3、TCP通信的特点:面向连接,是可靠的,支持错误重传,不会丢包。

4、TCP通信的过程还会发生三次握手和四次挥手,相对比较繁琐,后面探讨这个过程,暂时总结到这里。

Linux系统编程(七)网络编程TCP、UDP Socket(套接字)是在网络编程中用于实现不同主机间通信的一种机制,它允许应用程序通过网络发送和接收数据。Socket的工作原理基于客户端-服务器模型,其中一个程序充当客户端,另一个充当服务器。通常,服务器在一个主机上运行并侦听特定的端口,客户端则连接到服务器的IP地址和端口号。 阅读详情

相关推荐

基于Linux下的TCP编程

基于Linux的TCP网络编程一.Linux下TCP编程框架TCP网络编程的流程包含服务器和客户端两种模式。服务器模式创建一个服务程序,等待客户端用户的连接,接收到用户的连接请求后,根据用户的请求进行处理;客户端模式则根据目的服务器的地址和端口进行连接,向服务器发送请求并对服务器

冀博 3万+

LinuxTCP编程详解

C/S模式:Client客户端、Server服务器TCP编程基于socket套接字实现,因此也习惯称为。

2301_79532069的博客 1869

中心对数比变换(Centered Log Ratio Transformation,CLR)的原理及scikit-bio介绍

中心对数比变换(Centered Log Ratio Transformation,CLR)是一种数据预处理方法,常用于成分数据分析领域。在成分数据中,各成分之间通常存在一定的约束关系,比如它们的和为固定值等,中心对数比变换可以有效地处理这种具有特殊约束的数据。官方文档scikit-bio是一个在Python3中处理生物数据的库成分统计 (skbio.stats.composition )模块中的,此函数将组合从Aitchison几何体转换到真实空间。这个clr。

RECORD LEARN PROGRESS 1万+

Linux《Socket编程Tcp》

本文介绍了基于TCP套接字的编程接口和实现方法。首先对比了TCP与UDP套接字的差异,重点讲解了TCP特有的连接建立接口(connect/accept)。然后通过多个实例展示了TCP通信的实现:从基础echo服务到支持多客户端的多进程/多线程版本,再到线程池优化版本。接着实现了实时翻译字典功能,最后完成了一个远程命令执行服务,包含命令白名单安全机制。文中详细呈现了各个版本的代码实现,包括套接字绑定、连接处理、数据传输等核心环节,并介绍了使用netstat工具监控网络状态的方法。通过系列实践,帮助开发者掌握T

mljy.博客 1806

手把手教你用Ollama & AnythingLLM搭建AI知识库,无需编程,跟着做就行!

本地运行大模型耗资源,需要选择较小的模型作为基础模型。在终端中运行时可能会出现 CUDA 错误,表示显存不足,导致提供的端口失效。中文支持不够完善。\3. 文中提到的技术软件工具有:Ollama、Chatbox、Open WebUI、向量数据库、嵌入模型、本地模型 Gemma、AnythingLLM。

2401_86435672的博客 1万+

SAP PP工艺路线Routing保姆级配置指南:从CA01创建到替代/并行顺序实战

本文详细解析SAP PP模块中工艺路线(Routing)的配置与应用,从基础创建(CA01)到高级功能如替代顺序和并行顺序的实战操作。通过真实案例演示,帮助用户掌握SAP PP工艺路线的精细化管理,提升生产流程效率。

weixin_30898555的博客 388

Linux网络编程之TCP编程

socket网络编程 ;TCP提供面向连接的,一对一的可靠传输的协议;UDP提供不可靠,无连接的传输协议,实现TCP多进程和多线程的并发服务器,冲冲冲!

qq_54402650的博客 2850

多传感器融合SLAM指南:如何结合视觉与激光雷达提升建图精度

本文深入探讨了多传感器融合SLAM技术,详细解析了如何将视觉传感器与激光雷达(特别是3D激光雷达)进行深度融合以提升建图精度与鲁棒性。文章从传感器特性分析、数据同步标定、前端融合策略(松耦合与紧耦合)到后端优化与地图构建,提供了完整的实战指南,并重点介绍了V-LOAM等经典融合框架的核心思想,旨在帮助开发者构建适应复杂动态环境的高精度SLAM系统。

weixin_29056145的博客 535

Linux网络编程系列之TCP协议编程

Linux网络编程系列之TCP,TCP的简单介绍和使用

AABond的博客 1852

Agent 长期记忆三代演进:从 RAG 到 Memory Graph,mem0 / Zep / LangMem / Letta 深度横评

文章摘要 2026年,Agent长期记忆技术迎来关键突破,OpenAI、Anthropic等厂商通过扩大上下文窗口和推出记忆工具,推动长期记忆从工程补丁发展为独立技术层。本文通过分析三代记忆架构演进(RAG→结构化Fact→MemoryGraph)和四大方案(mem0/Zep/LangMem/Letta)的8维度横评,揭示以下核心观点: 长上下文≠长期记忆:128K上下文如同RAM,仍需硬盘式记忆层筛选和结构化存储,避免“Context Rot”导致的准确率下降。 三代架构演进: Gen1(RAG):向量检

LDZKKJ的博客 1406

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

python03011的博客 3751

Linux之Socket编程Tcp

Linux之Socket编程Tcp

2302_81120572的博客 1277

SAP S4 HANA:按单生产(MTO)场景中的COGS分割

本文介绍了SAP S/4HANA中提供的各种选项,以在销售订单/商品是按订单生产(以下称为MTO)生产流程中的成本对象时,在基于帐户的COPA环境中报告COGS分割信息。

adam915的博客 1191

【Linux】socket网络编程之TCP编程

本文主要介绍Linux操作系统下的网络编程之TCP协议编程的知识和编程流程。

weixin_61276540的博客 1189

2026年美赛数学建模竞赛 MCM B题:使用太空电梯系统建立月球殖民地 问题一 月球殖民地材料运输的三种场景建模 详细解题思路和代码

如果运输系统不能完美工作(例如,系绳摆动、火箭失败、电梯故障等),你的解决方案在多大程度上会发生变化?技术可行性:三种方案在技术上都是可行的,但挑战不同 经济性:混合方案在长期视角下最具成本效益 时间效率:并行运输可以显著缩短总建设时间环境影响:太空电梯的环境优势明显,混合方案可平衡需求风险分散:混合方案提供了天然的风险分散机制

YOLO 615

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Linux网络】Socket 编程TCP

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

qinjh_的博客 3723

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux网络编程之TCP

Linux网络编程之TCP

Xpccccc的博客 2308

计算机控制技术及应用

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Linux】Socket编程—TCP

其次父进程需要等待回收子进程,此时父进程会阻塞直到子进程完成通信,这样和之前单进程通信效果一样,所以为了不让父进程阻塞,子进程需要再创建子进程,用它来完成通信,此时父进程就可以直接回收子进程,孙子进程就成为孤儿进程进行通信,结束后由操作系统回收。介绍:服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接;对于多进程,首先每个进程都有自己的文件描述符表,所以父子进程都需要关闭自己不需要的文件描述符;引入之前实现的线程池,并使用单例模式。

Renswc的博客 1352

Linux 的 TCP 编程

TCP是TCP/IP协议族中面向连接的可靠协议,本文将介绍其工作流程以及在Linux中对其 进行编程的方法。 TCP基础 同其他任何协议栈一样, TCP向相邻的高层提供服务。因为TCP的上一层就是应用层,因此,TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递。应用程序通过编程调用 TCP 并使用TCP服务,提供需要准备发送的数据,用来区分接收数据应用的目的地址和端口号。 通常情况下, ...

hello呀! 716

Linux 网络编程 TCP/UDP编程

在TCP/IP协议族中,有很多种协议。TCP/IP协议群中的核心协议被设计运行在网络层和传输层,它们为网络中的各主机提供通信服务,也为模型的最高层--应用层中的协议提供服务。其中的TCP和UDP协议就是应用在传输层的协议。...

分享 1853

Linux的Socket编程之TCP

摘要:本文详细介绍了TCP编程的核心接口与实现方法,包括套接字创建、绑定、监听、连接、消息收发等关键步骤,并针对网络字节序转换进行了说明。第二部分通过CommandServer项目展示了具体应用:1)使用Common.hpp封装网络通用操作;2)Command.hpp实现命令执行功能;3)TcpServer框架支持多线程处理;4)完整实现客户端-服务器交互模型,支持远程命令执行与结果返回。文中特别强调了TCP连接管理、进程/线程处理策略以及网络数据转换的注意事项,为构建稳定网络服务提供了实用方案。

博客 | 复习知识点 + 练习 + 最终的领悟 | 全力以赴 1230

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万+

【Linux】:socket编程——TCP

实现了一个简易的tcp通信客户端与服务器,并且实现守护进程化,以及服务端提供服务的5种不同的方法。

Yikefore的博客 1388

【在Linux世界中追寻伟大的One Piece】Socket编程TCP

Socket是一种用于实现不同进程间通信的编程接口,它提供了网络通信的基本功能。在网络编程中,Socket可以理解为网络中的一个端点。通过Socket,程序可以通过网络交换数据。通过本篇文章,我们学习了如何在Linux环境中使用C语言进行TCP Socket编程。我们实现了一个简单的TCP服务器和客户端,理解了Socket的基本使用方法以及TCP通信的过程。在追寻One Piece的过程中,掌握网络编程的技能将是你成为伟大航海家的重要一步!

小蜗牛的珍贵百宝箱 1167

【Linux】Socket 编程 TCP

Socket 编程 TCP

2203_76003626的博客 1039

【Linux网络编程】TCP编程

00. 目录 文章目录00. 目录01. TCP概述02. TCP特点03. TCP中CS架构04. TCP相关函数05. TCP服务端示例06. TCP客户端示例07. 附录 01. TCP概述 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1715
上一篇: visual studio 2013下 创建C++动态库及调用
下一篇: linux下实现 多客户端访问服务器
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值