Linux C/C++网络编程基础 TCP简单实现

简单的linux下socket编程,分别基于TCP协议实现的简单程序

linux下socket编程可以概括为以下几个函数的运用:

  • socket()
  • bind()
  • listen()
  • connect()
  • accept()
  • read()
  • write()
  • close()函数



server端

/*
*   socket简单编程 服务端
 */

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

#define BUFFSIZE 1024

int main(int argc, char *argv[])
{
    int server_sockfd = 0;
    int client_sockfd = 0;
    int len = 0;
    int sin_size = 0;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    char buf[BUFFSIZE] = {0};

    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(8000);

    if((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("socket error!\n");
        return -1;
    }

    if(bind(server_sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) < 0)
    {
        perror("bind error!\n");
        return -1;
    }

    if(listen(server_sockfd, 5) < 0)
    {
        perror("listen error!\n");
        return -1;
    }

    sin_size= sizeof(struct sockaddr_in);

    if((client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_addr, &sin_size)) < 0)
    {
        perror("accept error!\n");
        return -1;
    }

    printf("accept client %s\n",inet_ntoa(client_addr.sin_addr));
    len = send(client_sockfd, "Hello word!\n",30,0);

    while((len = recv(client_sockfd, buf, BUFFSIZE, 0)) >0)
    {
        buf[len] = '\0';
        printf("buf = %s\n",buf);
        if(send(client_sockfd, buf, len, 0) < 0)
        {
            perror("send error!\n");
            return -1;
        }
    }

    close(client_sockfd);
    close(server_sockfd);

    return 0;
}

client端

/*
*   socket简单编程 客户端
 */

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

#define BUFFSIZE 1024

int main(int argc, char *argv[])
{
    int client_sockfd = 0;
    int len = 0;
    struct sockaddr_in server_addr;
    char buf[BUFFSIZE] = {0};
    bzero(&server_addr, sizeof(struct sockaddr_in));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    server_addr.sin_port = htons(8000);

    if((client_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("socket error!\n");
        return -1;
    }

    if(connect(client_sockfd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)) < 0)
    {
        perror("client error!\n");
        return -1;
    }

    printf("connect success!\n");

    len = recv(client_sockfd, buf, BUFFSIZE, 0);
    buf[len] = '\0';
    printf("client_buf = %s\n",buf);

    while(1)
    {
        printf("Enter string to send:");
        scanf("%s",buf);
        if(!strcmp(buf,"quit"))
        {
            break;
        }

        len = send(client_sockfd, buf, strlen(buf), 0);
        len = recv(client_sockfd, buf, BUFFSIZE, 0);
        buf[len] = '\0';
        printf("received: %s\n",buf);
    }

    close(client_sockfd);

    return 0;
}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程TCP/IP基础Linux网络编程之socket编程Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户 /服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSEADDR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline实现 用readline实现回射客户/服务器 getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 11socket编程(六) TCP回射客户/服务器 TCP是个流协议 僵进程与SIGCHLD信号 12socket编程(七) TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 13socket编程(八) 五种I/O模型 select 用select改进回射客户端程序 14socket编程(九) select 读、写、异常事件发生条件 用select改进回射服务器程序。 15socket编程(十) 用select改进第八章点对点聊天程序 16socket编程(十一) 套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程(十五) udp聊天室实现 21socket编程(十六) UNIX域协议特点 UNIX域地址结构 UNIX域字节流回射客户/服务 UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对象的持续性 24进程间通信介绍(二) 死锁 信号量 PV原语 用PV原语解决司机与售票员问题 用PV原语解决民航售票问题 用PV原语解决汽车租赁问题 25System V消息队列(一) 消息队列 IPC对象数据结构 消息队列结构 消息队列在内核中的表示 消息队列函数 26System V消息队列(二) msgsnd函数 msgrcv函数 27System V消息队列(三) 消息队列实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、消息队列与共享内存传递数据对比 mmap函数 munmap函数 msync函数 29System V共享内存 共享内存数据结构 共享内存函数 共享内存示例 30System V信号量(一) 信
### 回答1: Linux C/C++后台架构开发是一门非常具有前景的技能,在互联网和各种电子设备中都得到广泛应用。因此,这门课程的成长体系很重要,能够立足于现有技术发展趋势,不断完善内容,使学员能够跟随市场需求进行技术升级。 首先,课程应该注重基础知识的讲解,包括Linux操作系统的基础知识、C/C++编程语言的基础知识等,这是后续学习的基础。其次,应该注重实战训练,通过项目的实践来加深对知识的理解,并促进学员的技能提升。同时,要合理结合课程的理论知识和实践操作,培养学员的动手能力和实际应用技能。 除此之外,课程还应该关注行业技术变化的趋势,不断更新课程内容,讲解新技术的应用,使学员能够跟随技术的发展趋势提升自己。同时,要注重培养学员的团队合作能力和创新能力,帮助他们更好地适应团队工作和市场需求。 总之,Linux C/C++后台架构开发成长体系课程需要注重基础知识的讲解、实战训练、行业技术变化的跟进和团队合作与创新能力的培养。通过这些方面的努力,才能使学员掌握实用的技术,具备市场竞争力,并有能力适应未来技术的发展趋势。 ### 回答2: 作为一种开源的操作系统,Linux的应用广泛,尤其在服务器端,被广泛应用于Web服务器、数据库服务器等。因此,当今各大企业都需要专业的Linux后台架构开发人员来维护服务器的安全、稳定和高效运行。 而C/C++作为一种高效、可靠的编程语言,被广泛应用于Linux系统编程,尤其是在高性能、实时应用和底层驱动方面。因此,具备C/C++编程能力的Linux后台架构开发人员具有较高的市场竞争力。 在成长体系课程方面,专业的培训机构可以提供基础和高级的C/C++编程语言学习,以及Linux系统编程相关知识扎实的培训。而在课程设置和教学方式上,应该采取理论与实践相结合的方式,让学员在编程实践中逐渐掌握并理解相关知识。同时,在应用开发的过程中,特别是在搭建后台架构时,需要学会合理设计系统架构,选择合适的开发工具和技术,并能有效管理和维护系统。 此外,针对行业发展趋势和技术更新,培训机构应当不断更新课程内容,结合最新的技术趋势,为学员提供更具有竞争力的技术挑战,并开展多种实战项目实践。让学员在实践中提升自己的技能和实践经验,不断提升自身的职业竞争力。 ### 回答3: Linux C/C++后台架构开发是一个广受欢迎的领域,无论是大型互联网企业还是中小型企业都需要有相应的开发团队和技术人才。开发人员需要具备扎实的C/C++编程基础,熟悉Linux操作系统的运行机制和性能优化,了解分布式系统架构和网络通信协议等知识,以及掌握一定的数据库开发和管理经验。 针对此领域的开发人员,成长体系课程可以提供以下培训内容: 一、Linux操作系统原理:Linux系统的运行机制,常用命令和工具的使用方法,文件系统和进程管理等。 二、C/C++编程:C/C++基础语法和编程规范,数据结构和算法,内存管理和锁机制等。 三、分布式系统架构:分布式系统的概念和架构,通信协议和数据传输方式,分布式存储和计算等。 四、网络通信:TCP/IP协议栈和网络编程,HTTP、Websocket等常用协议的使用和封装。 五、数据库开发和管理:常见数据库的概念和使用方法,SQL语言编写,数据库的设计和优化等。 通过以上培训内容的学习和实践,开发人员可以逐渐掌握Linux C/C++后台架构开发的技能和经验,不断提升能力和水平。同时,课程还将涉及团队协作和项目管理等方面的知识,培养学员的软技能和团队意识。最终,学员能够独立完成复杂的后台开发任务,为企业创造更大的价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值