linux 开发设计软件,在Linux平台下开发和设计聊天软件

2023-10-26

在网络无所不在的今天,在Internet上,有ICQ、MSN、Gtalk、OICQ等网络聊天软件,极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发送信息,不管对方是否也同时在线,只要知道他有号码。

Linux 操作系统作为一个开源的操作系统被越来越多的人所应用,它的好处在于操作系统源代码的公开化!只要是基于GNU公约的软件你都可以任意使用并修改它的源代码。但对很多习惯于Windows操作系统的人来说,Linux的操作不够人性化、交互界面不够美观,这给Linux操作系统的普及带来了很大的阻碍。因此制作一个Linux 操作系统下的拥有人性化界面的实时通讯工具,将给那些刚刚接触Linux操作系统的用户带来极大的方便,而且通过设计这样的一个应用程序还能更好的学习网络编程知识和掌握Linux平台上应用程序设计开发的过程,将大学四年所学知识综合运用,以达到检验学习成果的目的。

1.1 网络聊天软件的发展及现状

网络的诞生从某种意义上来说改变了我们的生活,它将这个世界的上不同地域的人之间的距离拉近了。伴随着网络的诞生,网络聊天软件也随之而来。最初的网络聊天软件只是有简单的文本界面,功能也十分有限,随着技术的不断发展与强大,拥有更多功能和美观界面的聊天程序走进了我们的生活,也有越来越多的人将网络聊天软件作为他们日常生活交流和通信的工具。

网络聊天软件在国外有ICQ等,在国内主要有OICQ、Ticq和一些基于网页的即时通讯工具,像Chinaren网站上的WebMaster等等,都做得即美观,且功能强大,OICQ现在拥有非常大的用户群。

现在也有很多在网络上不使用服务器的通讯软件,这种软件小巧且方便,也能解决一部分问题。但是有服务器的通讯软件,有着不可比拟的优势:可以发送离线消息,不管用户当时是否在线,下次上线时,就可以看到这条消息了。可以保存用户的个人信息或个人简介,供人查看。而且,无服务器的通讯软件,是以机器为通讯单元的,而有服务器的聊天软件是以人为通讯单元的。所以,带服务器的聊天软件在网络上,有着非常广泛的用途,为网络上的通讯带来了极大的方便,它使人与人之间的交流不再只局限于某一个范围,并且它的开销也是很小的,你只需要拥有一部可以联网的PC机就足够了!

1.2 TCP/IP协议简介

TCP/IP是国际互联网所采用进行网际互连的通信协议。实际所称的TCP/IP协议包括了在国际互联网络应用的一组协议,互联网协议族是此协议族的另一个名字。

1.2.1 TCP协议简介

因为我们这个程序所采用的是面向连接的TCP协议,所以我们这里就只对TCP(传输控制协议)这一部分作详细的介绍。

TCP:传输控制协议(TCP:Transmission Control Protocol)

传输控制协议是一个 TCP/IP 组中能够实现可靠数据传送的传输层协议,并通过顺序响应能实现对应用程序的虚拟连接服务,在必要的时候进行包转发。与 IP 协议相结合,TCP 代表了网络协议的核心。

大多数网络应用程序是在相同的机器上运行的,计算机上必须能确保目的地的应用程序从源地址处获得数据包,及源计算机上的应用程序的回复获得选择的路经。这一过程是通过使用 TCP 的“端口号”完成的。网络IP地址和端口号的连接要达到唯一的标识,我们称之为“套接字”或“端点”。为了可靠通信,TCP 在端点间建立了连接或虚拟电路。

TCP 服务提供了数据流传输、可靠行、有效流控制、全双工操作和多路复用技术等。

关于数据流传输,TCP 发送一个由序列号定义的无结构的字节流。这对应用程序有利,因为在被送出 TCP 之前应用程序不需要划分成块,TCP 可以将字节整合成字段,然后发送给IP。

TCP 是面向连接的端到端的可靠协议,并保证传送数据包的顺序,而顺序是用一个响应序号来保证的,这个响应序号告诉接收者发送者期望的下一个包。如果在规定时间内,没有收到关于这个包的确认响应,则需要重新发送此包。TCP 的可靠机制允许设备处理丢失、删除及读错的包。暂停机制允许设备监测丢失的包并请求重发。

TCP 提供了有效流控制。当向发送者返回发送确认响应,接收 TCP 进程就会暗示最高序列号,它能接收并保证不会发生溢出。

全双工操作:TCP 进程能够同时发送和接收包。

TCP 中的多路技术:大量上层同时会话在单连接时进行多路复用。

1.2.2 UDP协议简介

UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。

与我们所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。

UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

1.3 套接字简介

应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。

区分不同应用程序进程间的网络通信和连接,套接字主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。通过将这3个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务

1.4 开发平台简介

1.4.1 Linux系统简介

Linux 操作系统是UNIX 操作系统的一种克隆系统。它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet 网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。

GNU 计划和自由软件基金会(the Free Software Foundation - FSF)于 1984 年创办。旨在开发一个类似 Unix、并且是自由软件的完整操作系统:GNU 系统。

在Linux平台上运行的软件都是免费使用的,且你可以随意的改动代码部分,只要他们是完全基于GNU的。

1.4.2 Gtk+图形开发库简介

Gtk+(GIMP Toolkit,GIMP工具包)是一个用于创造图形用户接口的图形库。Gtk+是基于LGPL授权的。

Gtk+图形库使用一系列称为“构件”的对象来创建应用程序的图形用户接口。它提供了窗口、标签、命令按钮、开关按钮、检查按钮、无线按钮、框架、列表框、组合框、树、列表视图、笔记本、状态条等构件。可以用它们来构造非常丰富的用户界面。在用Gtk+开发Gnome的过程中,由于实际需要,在上面的构件基础上,又开发了一些新构件。一般把这些构件称为Gnome构件(与Gtk+构件相对应)。这些构件都是Gtk+构件库的补充,它们提供了许多Gtk+构件没有的功能。从本质上来说, Gtk+构件和Gnome构件是完全类似的东西。GTK本质上是面向对象的应用程序编程接口(API )。虽然完全是用C写成的,但它仍然是用类和回调函数(指向函数的指针)的方法实现的。

1.4.3 Gnome的开发结构简介

只使用Gtk+ 构件也可以开发出优秀的Linux应用程序,但是Gnome构件,特别是GnomeApp、GnomeUIInfo等,使开发界面一致的应用程序变得更加容易。Gnome的一些新特性,如popt参数分析,保存应用程序设置等也是Gtk+构件所没有的。

Gnome的开发架构包含以下一些内容:

1. 非Gnome 库:

2. Gnome库:

3. 其他库

这些库一般被使用在Gnome应用程序中,但它不是Gnome-libs 专属的部分。

1.4.4 Glade集成开发工具简介

Glade是面向GTK+/Gtkmm的图形界面开发工具。它向用户提供可视化的界面设计环境,并以XML文件的格式进行保存。Glade提供了一个类库,在程序运行的时候,它可以通过读取XML文件而生成相应的程序界面,从而达到了程序代码逻辑与用户界面的完全分离。另一方面,有另一个工具(glade--)可以用来把这些XML文件直接生成相应的Gtk+/Gtkmm代码。对于比较小型的项目,这种方法是比较适用的。

这种通过XML对界面进行描述的特性极大地增强了程序的灵活性,界面的设计与代码的编写可由相关的人员进行。也许这是以后桌面应用程序开发的一个方向。

1.4.5 编程语言和编程工具简介

因为C语言是平台适应性最强的语言,差不多每种平台上都会有一个C编译器。C语言也更易移植,因而,在Linux下编程的最佳语言应该是C语言,Linux上的很多应用程序就是用C语言写的。因为Gtk+ 和Gnome是用C语言编写的,所以在开发Linux下的GUI程序时使用C语言是非常方便的。

Linux发布版本中都提供了C编译器gcc,它目前的版本是4.1。

Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30% gcc 编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。

调试器GDB能让你观察另一个程序在执行时的内部活动,或程序出错时发生了什么。

GDB主要能做四件事(包括为了完成这些事而附加的功能),帮助用户找出程序中的错误。

运行程序,设置所有的能影响程序运行的东西。

保证程序在指定的条件下停止。

当程序停止时,让用户检查发生了什么。

改变程序。那样用户可以试着修正某个bug引起的问题,然后继续查找另一个bug。

申明:本站图片来源于网络,未应用于任何商业活动,如有版权问题请联系我们删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 开发设计软件,在Linux平台下开发和设计聊天软件 的相关文章

  • 文本情感分析当前研究热点

    先介绍文本情感分析主要的数据集 Stanford Sentiment Treebank 11855个句子划分为239231个短语 每个短语有个概率值 越小越负面 越大越正面链接 IMDB 100 000句子 正面负面两类链接 附LSTM和C
  • 使用datetime库,对当前日期输出3种不同日期输出方法。

    import datetime import time print datetime date today print time strftime Y m d time localtime time time 更详细time strftim
  • [Linux] 多网卡主机之间指定双方通信网卡的办法

    一 Linux 下使用router 工具 指定路由解析 先看一下本机的路由信息 root gt route Kernel IP routing table Destination Gateway Genmask Flags Metric R
  • kafka后台启动命令

    命令 sh kafka server start sh config server properties 目的是想让服务后台启动 符号代表后台启动 运行命令后服务确实后台启动了 但日志会打印在控制台 而且关掉命令行窗口 服务就会随之停止 这
  • 万物分割SAM使用教程

    文章目录 安装 使用 全图分割 点 框 完整代码 原理篇 安装 创建虚拟环境 conda create n sam python 3 8 激活环境 conda activate sam 下载代码 git clone git github c
  • Python利用zipfile生成linux压缩目录穿越文件

    import zipfile if name main try binary 111 zipFile zipfile ZipFile test2 zip a zipfile ZIP DEFLATED info zipfile ZipInfo
  • 自建网站:免费图床不好用,云存储担心被攻击

    刚刚在看公众号文章的时候 无意中刷到了两个关于图片存储的文章 一个说的是网站被盗刷了1 7T流量 另一个说的是将网站图床换到了阿里云OSS 然后结合到前段时间小编遇到的一些关于网站图床的问题 小编就想到了很多自建网站其实都面临着图片等静态文
  • 【嵌入式】基于FATFS/Littlefs文件系统的日志框架实现

    嵌入式 基于FATFS Littlefs文件系统的日志框架实现 文章目录 嵌入式 基于FATFS Littlefs文件系统的日志框架实现 1 概述 2 设计概要 3 设计实现 3 1 初始化 init 3 2 日志写入 write 3 3
  • VMware Workstation 11 安装教程

    哈喽 大家好 今天一起学习的是VMware Workstation 11的安装 vm虚拟机是小编非常喜欢的生产力软件 小编之前发布的测试教程钧在vm上进行的实验 VMware Workstation是一款功能强大的桌面虚拟计算机软件 它能够
  • 进入geth交互平台的命令大全解释

    这里有很多进入geth平台的命令参数来确保你的链是私链 nodiscover 不被其他节点发现 但是如果有相同创世块和networkid的节点可以连接进私链 nodiscover Use this to make sure that you
  • k8s集群搭建(二进制方式)

    k8s集群搭建 二进制方式 1 安装要求 2 准备环境 3 操作系统初始化配置 4 部署 Etcd 集群 4 1 准备 cfssl 证书生成工具 4 2 生成 Etcd 证书 4 3 从 Github 下载二进制文件 4 4 部署 Etcd
  • 编码套路的实战演练

    1 写一份自己的简历 把自己所有的相关技能都罗列出来 然后把那些在100年后还用得到的标出来 给每个技能打分 满分为10分 2 罗列出你所景仰的程序员 尽量包括那些与你一起工作的人 因为你会在工作中从他们身上获取一些技能 记录下他们身上的1
  • 干货

    源于频率主义学派的极大似然估计 Maximum Likelihood Estimation 简称MLE 是根据数据采样来估计概率分布参数的经典方法 在机器学习的对数几率回归 贝叶斯分类器等中有广泛的应用 1 极大似然估计法 设总体的概率密度
  • [23最新版新手向]Linux系统下安装MMDetection

    前言 MMDetection 是商汤和港中文大学针对目标检测任务推出的一个开源项目 它基于Pytorch 实现了大量的目标检测算法 例如 fast rcnn faster rcnn detr 等算法 一 安装 UBuntu20 04 及创建
  • C语言竞赛小题分析

    问题1 单身狗的愤怒 题目描述 罩得住学长是工作室最帅的帅哥 所以集训的学妹都喜欢罩得住学长 但是工作室的其他学长很不爽 现在挑5个女生出来 如果女生喜欢罩得住学长就为1 不喜欢就是0 喜欢的人越多 学长们的仇恨值越高 请求出学长们的愤怒值
  • Jetson nano中使用tensorrt推理yolov5

    克隆下载yolov5项目 准备yolov5项目 从仓库下载5 5 0版本 git clone b v5 0 https github com ultralytics yolov5 git 下载权重地址 https github com ul
  • 关于Commit message代码提交

    Commit message代码提交规范 目录 一 简述 二 Commit message格式 命令行方式 1 Header 2 Body 3 Footer 4 Revert 三 工具 1 Commitizen 2 validate com
  • c++关键字之volatile

    1 volatile 直接存取原始内存地址 volatile 求助编辑百科名片 volatile 就象大家更熟悉的const一样 volatile是一个类型修饰符 type specifier 它是被设计用来修饰被不同线程访问和修改的变量
  • Maven中央仓库地址

    Maven 中央仓库地址有一下几个 可能这里不全 但一定能够使用 1 http mvnrepository com 属于美化版本 国外网站 在国内可能下载比较慢 2 http repo1 maven org maven2 属于基本版本 查找

随机推荐

  • nodejs之文件下载

    request模块实现下载 app js var express require express var app express 创建express实例 var routes require routes routes js 吧路由引入 代
  • Swin-Transformer-Object-Detection环境搭建训练流程及问题

    一 背景 Swin Transformer Swin代表移位窗口shifted window 可以作为计算机视觉的通用backbone 它的github网址是Swin Transformer 然后它有好几种应用 Getting Starte
  • 古风排版 c语言

    中国的古人写文字 是从右向左竖向排版的 本题就请你编写程序 把一段文字按古风排版 输入格式 输入在第一行给出一个正整数NN lt 100 lt 100 是每一列的字符数 第二行给出一个长度不超过1000的非空字符串 以回车结束 输出格式 按
  • flutter如何实现点击事件

    在Android中 您可以通过调用方法setOnClickListener将OnClick绑定到按钮等view上 在Flutter中 有两种方法 1 如果Widget支持事件监听 则可以将一个函数传递给它并进行处理 例如 RaisedBut
  • 华硕飞行堡垒进入bios

    1 关机重启 在重启时一直按住F2进入如下页面 2 按下F7 进入如下页面 3 通过移动键盘右键 gt 键 使界面来到Advanced 4 通过移动键盘下键 移动到Advanced中的SVM Mode 通过Enter键进行下拉选取 入下图小
  • unity知识学习(一)巨型太阳---组件Lens Flare的运用

    unity关于在天空设置一个巨型太阳 组件Lens Flare的运用 介绍 unity版本 如何制作巨型太阳 最基本的操作 如何制作巨型太阳 关键操作 我制作好的巨型太阳 介绍 本次知识前面比较简单 因此将基本操作和关键点操作分开 读者可方
  • CSS 实现文字渐变色

    1 background 属性设置渐变色 1 源码示例 text background image linear gradient to right pink purple color transparent webkit backgrou
  • eclipse New Server Runtime Environment 列表中没有 Apache Tomcat

    该问题主要原因可能是 Eclipse插件不全引起 按以下步骤安排插件即可 1 点击工具栏上的Help gt Install New Software 2在弹出的对话框的 Work with 输入 http download eclipse
  • 检查你的电脑是否支持硬件虚拟化技术

    有时候需要知道电脑是否支持硬件虚拟化技术 这种情况可能需要在在windown7系统上装MacOS 系统 通过使虚拟机 在虚拟机上安装出现如下问题是 首先 在更改你的BIOS设置之前 检测你的处理器是否支持硬件虚拟化技术 下载 securab
  • 等和子数组最小和(Java)

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组nums 数据范围 1 lt m lt 50 1 lt nums i lt
  • ElasticSearch从入门到精通:常用操作

    hello 大家好 我是 Jackpop 硕士毕业于哈尔滨工业大学 曾在华为 阿里等大厂工作 如果你对升学 就业 技术提升等有疑惑 不妨交个朋友 我是Jackpop 我们交个朋友吧 在前面这一部分 我已经解释了ElasticSearch的基
  • 51单片机四个并行I/O接口

    P0口 功能1 作为正常的并行I O接口 P1 P2 P3原理相同 控制端C 0 MUX开关向下 经过与门 T1截止 P0口作为输出口时 a 需要在三极管T2上部添加上拉电阻如图所示 b 内部总线输出数据为1 经过Q非得0 再经过MUX开关
  • 用python将时间序列信号或一维数组 转化成 图像的几种方法

    用python将时间序列信号或一维数组转化成图像的几种方法 深度学习在计算机视觉有了非常广泛的应用 视觉图像数据为二维数据 而在故障诊断领域的数据 来自于传感器的采集 属于典型的一维时间序列 因而绝大多数问题可以抽象成时间序列分类 TSC
  • Unity官方FPS教程解析(二)

    在上一篇文章中我们只是初步了解了这个游戏层次构造的一部分 今天我们继续上一章的内容吧 Enemy 两个enemy本质上没有差别 所以就其中一个来说说吧 Enemy Turret 这个初始场景的boss 一个站桩型敌人 当选中其根物体后我们可
  • Linux下SPI驱动详解及示例代码

    SPI Serial Peripheral Interface 是一种常用的串行通信协议 广泛应用于嵌入式系统中 在Linux系统中 SPI驱动负责管理和控制与SPI总线设备的通信 本文将详细介绍Linux下SPI驱动的工作原理 并提供示例
  • MES生产管理系统原型 MES产品原型 Axure产品原型

    MES生产管理系统原型 MES产品原型 Axure产品原型 1 生产管理 包括生产订单 生产计划 生产工单 工序任务单 报工记录 可提供高效的生产排程 2 质检管理 包括质检单 质检方案 检验项目 检验组管理 可提升质量追溯水平 3 库存管
  • uniapp tababr凸出图标已经自定义tabbar

    uniapp关于tabbar的文档 现在我想tabbar中间的显示为凸出的图标 类似下图 只需要在app中使用 不用兼容小程序的话 可以使用官方的midButton配置项 该配置项不兼容各种小程序 midButton height 70px
  • vue中使用el-upload组件修改上传的图片时,每次都会自动闪过上一次的图片

    引言 在进行vue后台管理系统开发的时候又遇到了这个问题 由于上次没有写文章记录 所以还是查看了之前写的项目才解决这个问题 遇到的问题 我将上传的表单单独作为一个组件 假设为A页面 然后在另外一个页面 假设为B页面 中使用Dialog来显示
  • 数据清洗,数据分析,数据挖掘的区别

    数据清洗 是指对原始数据进行预处理 包括去重 去噪 填充缺失值 处理异常值等操作 以提高数据的质量和可用性 保证分析和挖掘的可靠性 数据清洗是数据处理的基本步骤 也是数据分析和数据挖掘的前提 数据分析 是指利用统计学和数据科学技术对数据进行
  • linux 开发设计软件,在Linux平台下开发和设计聊天软件

    在网络无所不在的今天 在Internet上 有ICQ MSN Gtalk OICQ等网络聊天软件 极大程度上方便了处于在世界各地的友人之间的相互联系 也使世界好像一下子缩小了 不管你在哪里 只要你上了网 打开这些软件 就可以给你的朋友发送信