0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux网络编程

jf_09640219 来源:jf_09640219 作者:jf_09640219 2024-03-26 10:58 次阅读

一、介绍

比如2个安卓手机需要通讯,就必须获得对方的IP地址和端口

wKgZomX2ka2AJV7kAAP5n4qgJjM308.pngwKgZomX2lV-Aca30AB1GmzLAIgU761.png

socket套接字:分为TCP和UDP

TCP:面向连接,可靠,(类似于双方打电话),适用于数据量小而且需要准确传输

UDP:面向报文,不可靠,(类似于双方发短信),适用于数据量大且不需要准确传输

wKgZomX2lSCAO43UACggk-g7ydc046.pngwKgaomX2lNuAC-IZAAGPQ1ZXiz8556.png

进程间通信是基于Linux内核的,不适用于两台手机之间的通信。

字节序:

小端:将低序字节存储在起始地址

大端:将高序字节存储在起始地址

wKgaomX2mS2AaGfdAAIYGvahd34588.pngwKgZomX5LR2AYk6BABfbQuMah5Y754.png

电脑是小端字节序,网络字节序是大端字节序。

二、socket服务器与客户端

客户端获取服务器的端口号和IP地址:

wKgZomX2mwCALJ_uABsiaxSPn-A629.pngwKgZomX2nYWAANmtAAuu6DEn-_g558.png

socket的具体工作流程:

wKgaomX2ob6AXEcHABVDTM7L_v4425.png

wKgZomX2o0-AQHU-ABF1UgWIrms045.png

wKgaomX2ph6AFJBRABGqHrVQv6Q325.png

wKgZomX2pj2AEOrMAAsnFEGdHCA631.pngwKgZomX2poSAY8jiAAmkSxA8o1Q530.pngwKgaomX2ppKAHitAAA6wuYoS81o699.pngwKgZomX2psGAQ0AtAAm9i9Mt34o494.png

wKgaomX4PfSAekTwAAXj3X_zQmg956.pngwKgZomX4PamAKZmxAAO4irgffDg660.png

wKgaomX4PtKAQxDvAAv-m_hmCPs796.png

atoi()函数

atoi():int atoi(const char *str );

功能:把字符串转换成整型数。

wKgZomX5RNOAC54lAA0cWwlB9w0119.png

实现例程:

一、linux下客户端连接服务器,成功后,主机(客户端)telnet远程登录虚拟机(服务器):

①:

wKgaomX5VOSAJoz-AAH0rT9JuIw135.png

创建套接字,确定好连接协议(IPV4),type种类选择为流式套接字,基于TCP协议。

②:

wKgZomX5Vd6ANdtmAAMxS9TxCzo014.png

确定好服务器的IP地址以及端口号

其中htons是将端口号转换成网络能识别的格式;inet_aton是将IP地址转化成网络识别的IP地址。

③:

wKgaomX5WRCAfID3AACcrqExgC8998.png

监听是否有客户端连接。

④:

wKgaomX5WTiAMQBOAADJOcEmtVo435.png

允许客户端的接入。

最后while(1);等待客户端的接入。

二、获取客户端的IP地址:

wKgZomX8MdGADVK6AAXOTfO0wLU169.png

在上一个工程代码的结构上,增加accept具体监听对象,以及读取IP地址。

三、客户端与服务器数据传输的实现:

客户端先写入再读取:

wKgZomX8NpmALCdSAALsUeEW4dk726.png

服务器端先读取再写入:

wKgZomX8NtGAY-XsAANs38KMT2Q661.png

最后运行服务器与客户端的代码会得到:

wKgaomX8NvyARUM6ABKQRjBOZHc784.png

四、端口经常被占用,做成main函数传参配置文件

wKgZomX-b5OAVZ_lAAmL7XPcUxg555.png

在上述例子中编写传参参数

  c_addr.sin_port=htons(atoi(argv[2]));
       inet_aton(argv[1],&c_addr.sin_addr);
其中atoi(argv[2])是将字符串转换为整型数据。

运行结果:

wKgaomX-cxaABXqkAA1fmBkn7WE112.png上:客户端  下:服务器

五、

在上述客户端与服务器之间的聊天


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11319

    浏览量

    209828
  • 服务器
    +关注

    关注

    12

    文章

    9231

    浏览量

    85625
  • 网络编程
    +关注

    关注

    0

    文章

    72

    浏览量

    10084
收藏 人收藏

    评论

    相关推荐

    百问FB网络编程 - 网络编程简介

    6.1 网络编程简介 ​要编写通过计算机网络通信的程序,首先要确定这些程序同通信的协议(protocol),在设计一个协议的细节之前,首先要分清程序是由哪个程序发起以及响应何时产生。 ​举例来说
    发表于 12-04 09:46

    Python编程:处理网络请求的代理威廉希尔官方网站

    网络编程中,代理威廉希尔官方网站 扮演着至关重要的角色,尤其在处理网络请求时。通过代理服务器,我们可以实现请求的转发、缓存、负载均衡以及安全控制等功能。Python作为一种功能强大的编程语言,为提
    的头像 发表于 11-12 07:23 201次阅读

    Linux网络基础知识总结

    同 CPU、内存以及 I/O 一样,网络也是 Linux 系统最核心的功能。 网络是一种把不同计算机或网络设备连接到一起的威廉希尔官方网站 ,它本质上是一种进程间通信方式,特别是跨系统的进程间通信,
    的头像 发表于 10-28 10:42 270次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>基础知识总结

    Linux应用编程的基本概念

    Linux应用编程涉及到在Linux环境下开发和运行应用程序的一系列概念。以下是一些涵盖Linux应用编程的基本概念。
    的头像 发表于 10-24 17:19 245次阅读

    Linux开发怎么学?

    令是使用 Linux 的基础,包括文件操作、目录管理、用户管理、进程管理、网络管理等方面。可以通过阅读相关的书籍、在线教程等方式学习。以下是常用的命令实例。 # 列出当前目录下的文件和子目录 ls # 更改
    发表于 10-10 14:34

    Linux网络协议栈的实现

    网络协议栈是操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作系统中,网络协议栈(Network Stack)负责实现 TCP/IP 协议簇,处理应用
    的头像 发表于 09-10 09:51 330次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>协议栈的实现

    linux开发板与树莓派的区别

    操作系统的微型计算机,主要用于教育、编程、媒体播放等领域。 硬件配置 Linux开发板:Linux开发板的硬件配置因厂商和型号而异,通常包括处理器、内存、存储、网络接口等。 树莓派:树
    的头像 发表于 08-30 15:34 1030次阅读

    Linux 驱动开发与应用开发,你知道多少?

    一、Linux驱动开发与应用开发的区别开发层次不同:Linux驱动开发主要是针对硬件设备进行编程,处于操作系统内核层,直接与硬件交互,为上层应用提供设备访问的接口。Linux应用开发则
    的头像 发表于 08-30 12:16 836次阅读
    <b class='flag-5'>Linux</b> 驱动开发与应用开发,你知道多少?

    Linux中查看IP地址的方法

    ifconfig是一个网络管理工具,用于配置、控制和查询网络接口。在许多旧的Linux发行版中,ifconfig是查看和配置网络接口的主要工具。
    的头像 发表于 08-07 15:16 7682次阅读
    在<b class='flag-5'>Linux</b>中查看IP地址的方法

    如何使用Python进行神经网络编程

    。 为什么使用Python? Python是一种广泛使用的高级编程语言,以其易读性和易用性而闻名。Python拥有强大的库,如TensorFlow、Keras和PyTorch,这些库提供了构建和训练神经网络的工具。 神经网络的基
    的头像 发表于 07-02 09:58 422次阅读

    Linux 6.10集成RISC-V更新,支持Rust编程语言

    本次补丁升级中,Linux内核进一步扩展了对应于RISC-V架构的Rust编程语言支持。在此之前,Rust已可应用在x86_64、龙芯LoongArch以及ARM64等多种架构之上。
    的头像 发表于 05-23 17:16 976次阅读

    Linux是做什么用的?

    Ubuntu、Fedora、Debian等)提供了友好的用户界面和丰富的应用程序。 4、开发平台:Linux提供了丰富的开发工具和环境,支持多种编程语言和开发框架。许多开发人员使用Linux作为开发平台
    发表于 04-28 15:40

    FCX3使用cyusb_linux通过Linux对其进行编程,报SPI扇区擦除失败怎么解决?

    我有一个 FCX3 定制板,我尝试使用 cyusb_linux 通过 Linux 对其进行编程。 我 CAN 看到设备 VID (04b4) 和 PID (00f3),但是当尝试对 SPI 进行
    发表于 02-26 06:39

    linux多线程编程实例

    linux线程
    的头像 发表于 02-15 21:16 484次阅读
    <b class='flag-5'>linux</b>多线程<b class='flag-5'>编程</b>实例

    如何解决Linux系统中的网络连接问题?

    如何解决Linux系统中的网络连接问题? Linux系统中的网络连接问题是常见的威廉希尔官方网站 难题之一,通常涉及在Linux上配置
    的头像 发表于 01-12 15:17 1044次阅读