Linux下TCP Socket编程实例

Linux下SOCKET编程 协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。socket()函数创建的socket默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求。监听套接字: 监听套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,是服务器开始调用socket()函数生成的,称为监听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>

int main(void) {
    char *server_ip_addr = "127.0.0.1";
    int server_ip_port = 10004;
    char *send_message = "hello";

    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_fd < 0) {
        fprintf(stderr, "socket error %s errno: %d\n", strerror(errno), errno);
    }

    struct sockaddr_in t_sockaddr;
    memset(&t_sockaddr, 0, sizeof(struct sockaddr_in));
    t_sockaddr.sin_family = AF_INET;
    t_sockaddr.sin_port = htons(server_ip_port);
    inet_pton(AF_INET, server_ip_addr, &t_sockaddr.sin_addr);

    if((connect(socket_fd, (struct sockaddr*)&t_sockaddr, sizeof(struct sockaddr))) < 0 ) {
        fprintf(stderr, "connect error %s errno: %d\n", strerror(errno), errno);
        return 0;
    }

    if((send(socket_fd, send_message, strlen(send_message), 0)) < 0) {
        fprintf(stderr, "send message error: %s errno : %d", strerror(errno), errno);
        return 0;
    }

    close(socket_fd);
    socket_fd = -1;

    return 0;
}

server.c

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

#define MAX_READ_LINE 1024

int main(void) {
    char buff[MAX_READ_LINE];
    int recv_len = -1;
    int conn_fd = -1;
    int ret = -1;
    int server_ip_port = 10004;

    struct sockaddr_in t_sockaddr;
    memset(&t_sockaddr, 0, sizeof(t_sockaddr));
    t_sockaddr.sin_family = AF_INET;
    t_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    t_sockaddr.sin_port = htons(server_ip_port);

    int listen_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (listen_fd < 0) {
        fprintf(stderr, "socket error %s errno: %d\n", strerror(errno), errno);
    }

    ret = bind(listen_fd,(struct sockaddr *) &t_sockaddr,sizeof(t_sockaddr));
    if (ret < 0) {
        fprintf(stderr, "bind socket error %s errno: %d\n", strerror(errno), errno);
    }

    ret = listen(listen_fd, 1024);
    if (ret < 0) {
        fprintf(stderr, "listen error %s errno: %d\n", strerror(errno), errno);
    }

    for(;;) {
        conn_fd = accept(listen_fd, (struct sockaddr*)NULL, NULL);
        if(conn_fd < 0) {
            fprintf(stderr, "accpet socket error: %s errno :%d\n", strerror(errno), errno);
            continue;
        }

        recv_len = recv(conn_fd, buff, MAX_READ_LINE, 0);
        if (recv_len < 0) {
            fprintf(stderr, "recv error %s errno: %d\n", strerror(errno), errno);
            continue;
        }

        buff[recv_len] = '\0';
        fprintf(stdout, "recv message from client: %s\n", buff);
        close(conn_fd);
        conn_fd = -1;
    }

    close(listen_fd);
    listen_fd = -1;

    return 0;
}
Linux11 Socket编程 - TCP 对于面向连接的协议(如 TCP),这是一个必不可少的步骤,它使得客户端和服务器能够在网络上进行可靠的数据传输。基本功能:send函数主要用于在已经建立连接的套接字上发送数据。对于 UDP 套接字,recv函数会从网络中接收一个数据报,每次接收的是一个完整的数据报,但不保证数据报的顺序和是否能接收到所有发送的数据报,因为 UDP 本身是无连接的、不可靠的。而对于 UDP 套接字,send函数只是简单地将数据报发送出去,不保证数据一定能被接收,也不保证数据的顺序,因为 UDP 是无连接的、不可靠的数据报协议。 阅读详情

相关推荐

Android USB(type-c)耳机调试分析(十)

简介:优快云博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!】🚀】🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.​更多原创,欢迎关注:Android系统攻城狮​1.前言本篇目的:理解Android USB(type-c)耳机调试分析。

Android系统攻城狮 3998

linux下c/c++实例之十socket服务器实例

一、简介 二、详解 简单socket服务器和客户端(基础) 服务器: /* * socket简单编程 服务端 */ #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <neti...

乌托邦 9471

【Linux】Socket编程-TCP构建自己的C++服务器

详细讲解了在Linux下进行tcpsocket编程

You build it, you run it 4109

linux下socket编程实例

linux下socket编程实例 一、基本socket函数 Linux系统是通过提供套接字(socket)来进行网络编程的。网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。socket也有一个类似于打开文件的函数:socket(),调用socket(),该函数返回一个整型的socket的描述符,随后的连接建立、数据传输等操作也都是通过该 socket

cy_weiyi的博客 701

Linux 下的socket编程简单实例

在linux下编写的socket 服务器和客户端,可以进行简单的通讯

Linux下C++ Socket编程实例

一个简单的Socket编程样例,使用C++语言在Linux平台下运行。 包含一个通讯客户端代码和一个服务端代码。

《Linux系统编程篇》Linux Socket 网络编程03(Linux 进程间通信(IPC))——基础篇

本文提供了4个用C语言实现的最小网络通信程序示例,帮助理解socket、TCP和UDP的核心概念。通过TCP server/client和UDP server/client四组代码,展示了网络通信的基本流程:建立连接、收发数据。所有代码仅依赖标准socket API,可直接编译运行。文章重点比较了TCP和UDP在代码结构上的差异,解释了服务端与客户端的不同职责,并强调了TCP连接建立与数据收发的关键步骤。这些最小化示例可作为网络编程的入门练习,为后续更复杂的网络应用开发打下基础。

Strange_Head的博客 920

Linux下的简单socket编程示例

在Linux下的socket的简单编程示例,使用标准C,一共两个文件,一个客户端一个服务端。 相关文章http://blog.youkuaiyun.com/mimiduck/archive/2011/05/04/6393663.aspx

【Linux网络】Socket 编程TCP

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

qinjh_的博客 3726

实战Linux Socket 编程-示例源码

实战Linux Socket 编程-示例源码,加深你对Linux-socket编程的理解!

点云PCL库学习-双目图像转化为点云PCD并显示

文章目录 双目视觉模型 代码实现 总结 参考文章 一、双目视觉模型 和RGBD相机主动发射光线实现测距不同,双目测距原理通过配置立体摄像头(通常由左眼相机和右眼相机两个水平放置的相机组成)来获取一对同一场景中的二维图像,再基于同一空间点在两个坐标系下的视差来计算深度。双目测距的示意图和数学表达式如下所示: 双目相机的成像示意图 上述示意图描述了一个空间点在左右两目相机中位置之间的成像关系,根据相似三角形原理可得: 其中,f和b分别为相机焦距和双目相机基线,d为空间点在两个坐标系下

weixin_41957687的博客 6948

【Linux】Socket编程—TCP

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

Renswc的博客 1352

从原理图到PCB:Cadence Allegro 17.4网表同步全流程详解(含第三方网表配置)

本文详细解析了Cadence Allegro 17.4中从Orcad原理图到PCB布局的网表同步全流程。核心内容包括标准的第一方网表同步步骤,以及针对第三方网表导入时关键的封装库路径配置方法,并提供了常见同步错误的排查思路,帮助工程师高效、准确地完成设计数据传递,确保PCB设计顺利开局。

salt9的博客 655

Linux的Socket编程之TCP

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

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

支付宝周期扣款实战:从签约到主动扣款的完整Java代码与避坑指南

本文详细介绍了支付宝周期扣款功能的完整Java实现流程,从协议签约到主动扣款的各个环节,包括业务模型设计、签约接口实现、异步通知处理、主动扣款技术等关键步骤。针对开发中常见的陷阱和问题,提供了实用的避坑指南和代码示例,帮助开发者高效实现连续支付功能,提升用户留存率。

weixin_27199085的博客 374

QMT实盘交易入门:5分钟搞定ETF全球配置策略(附完整代码)

本文详细介绍了如何使用QMT平台实现ETF全球配置策略,从环境准备到策略编写、实盘部署全流程仅需5分钟。通过xtquant库对接交易所接口,提供完整的动量轮动策略代码,帮助投资者快速掌握自动交易技术,优化全球资产配置。

weixin_30675247的博客 335

【Linux】Socket 编程 TCP

Socket 编程 TCP

2203_76003626的博客 1039

BurpSuite+安卓模拟器双保险:避开真机抓包限制的完整配置指南

本文详细介绍了如何通过BurpSuite与安卓模拟器(如雷电、夜神)协同工作,绕过真机抓包限制的完整配置指南。从环境准备、网络拓扑配置到证书部署和流量分析,提供了一套高效的解决方案,帮助安全测试人员稳定捕获手机数据包,提升测试效率。

Apple的专栏 439

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

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

小蜗牛的珍贵百宝箱 1168

【AI面试】 Python 的装饰器

Python装饰器是一种高阶函数,用于在不修改原函数代码的情况下增强其功能。它通过@语法糖接收目标函数作为参数,并返回一个包含额外逻辑(如日志、缓存、权限验证等)的新函数。装饰器的核心价值在于代码复用和解耦,符合开闭原则,典型应用包括性能分析、权限控制等场景。例如,@timer_decorator可自动为函数添加耗时统计功能。本质上,@decorator等价于func = decorator(func),实际调用的是装饰器返回的包装函数。进阶技巧包括使用@functools.wraps保留原函数元信息。装饰

钱多多先森 184

Unity 之如何使用Pico4u锚点功能实现一个世界锁GameRoot

摘要 空间锚点技术是混合现实(MR)应用的核心,能永久记录虚拟物体的空间位置。文章介绍了在Unity中使用Pico SDK实现空间锚点的完整流程:1)环境配置需安装XR模块和Pico SDK;2)关键操作包括启动空间感知、创建/删除/查询/更新锚点;3)提供了经典应用案例,通过GameRoot节点实现场景固定和锚点同步。源码展示了基于XR交互工具包的锚点抓取与位置更新实现,为MR开发提供了实用参考方案。

TxNet 972

【Linux】socket网络编程之TCP

TCP网络编程,有启动服务器的多种版本,一篇详细学习

s_little_monster的博客 8676

如何使用Agent框架来模拟群体智能?

Agent 框架作为人工智能领域的重要工具,可以模拟复杂的群体智能行为,广泛应用于社会科学、经济学和行为学等领域。

335

Linux之Socket编程Tcp

Linux之Socket编程Tcp

2302_81120572的博客 1277

计算机控制技术及应用

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Linux—Socket编程TCP

本文介绍了TCP网络编程的实现方法,包括服务端和客户端的基本流程、核心函数以及四种不同版本的实现方案。服务端核心步骤包括创建套接字、绑定端口、监听连接、接收连接和读写数据;客户端步骤包括创建套接字、连接服务端和读写数据。文章详细展示了四种实现方案:单进程版(一对一通信)、多进程版(通过fork处理并发)、多线程版(使用pthread_create创建线程)以及线程池版(利用线程池提高效率)。每个版本都提供了关键代码片段,重点说明了连接处理、数据读写和资源释放等核心功能。这些实现方案展示了TCP网络编程从简单

2302_80208047的博客 394

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux - Socket编程TCP

本文介绍TCP Socket API实现与应用,涵盖socket()创建端口、bind()绑定地址等基础函数。通过V1单进程、V2多进程、V3多线程、V4线程池及V5带安全白名单的远程命令执行五版服务器迭代,讲解InetAddr字节序处理、日志系统、线程池管理及命令安全控制等关键技术,同时演示客户端无需显式bind的连接流程,展示TCP服务器从简单到复杂的演进过程,并提供完整代码实现与运行示例。希望这些内容对大家有所帮助,感谢大家的支持!

2402_84433929的博客 454

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 100行代码的简单视频播放器(ffmpeg4.1.3+SDL2.0.9)
下一篇: Google C++编程规范
托卡马克2022
博客等级 码龄12年 20粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值