- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下使用套接口与GTK编写网络通信程序
Linux下使用套接口和GTK编写网络通信程序
第一章、基础知识
1.1 套接口
1.1.1基础知识
套接口(socket)就是网络进程的ID,其可以简单的理解为网络地址(ip地址)和端口号。套接口分两种,流式套接口使用TCP协议,数据报套接口使用UDP协议。在Linux中套接口的操作类似于文件描述符,可以像操作文件一样操作他们。在Linux中使用套接口发送数据要注意字节顺序的问题,在网络传输中,是以高字节在前(big endian)的方式传送的,而本机解析这些数据,是和CPU的结构有关,在传输到网络之前,需将套接口数据结构sockaddr_in中的网络地址和端口转换为高字节在前的形式。
套接口的基本操作有绑定、连接、监听、应答、发送、接受、关闭等,以客户/服务器为主的网络机制其用socket进行TCP服务的简化图1-1。
一般给套接口分配的文件描述符从3开始,0为默认输入,1为默认输出,2为错误默认输出,这三个描述符固定分配给系统使用,如果将套接口文件描述符设置成相应的1/2/3,则获得的数据则输出到相应的地方。
图1-1
1.1.2 关于I/O
使用套接口主要进行数据传输,不免要与I/O打交道。其I/O操作主要有四种模型:阻塞式,非阻塞,多路复用以及信号驱动。本文的程序使用的是阻塞式的I/O,其简单但效率相对较低。阻塞在套接口应用中很重要,处理不好会导致双方均处于阻塞状态,造成死锁。比如客户端进行read操作,但是对方迟迟不发送信息,导致read一直没有返回值,程序便会一直等待。
1.2 GTK
GTK (Gimp Tool Kit) 为GNOME中使用的开源界面开发程序。相应的,在KDE中主要使用的是QT。GTK使用了事件触发的结构处理用户响应,其开发包包括GDK,支持包含C之内的多种编程语言
1.3 Linux下的c语言编写
这里Linux下的c语言编辑主要使用vi,编译程序使用gcc。Gcc编译过程中,有静态连接库等问题需要注意,使用的命令为
gcc -std=c99 `pkg-config --cflags --libs gtk+-2.0` -lpthread client.c -o client
gcc -std=c99 `pkg-config --cflags --libs gtk+-2.0` -lpthread service.c -o service
在处理字符串的时候,多应用stdlib.h和string.h里的标准库函数,区分指向常量区域的字符串指针以及字符串数组之间的区别,明确字符串数组的赋值方法(单个元素赋值或用strcat stpcpy),在Linux条件下,没有itoa函数将整型变为字符型,可以使用sprintf函数。
1.4 多线程
一个进程(process)派生另一个进程称为多进程,其相比单一进程具有较高的灵活性,能够更有效地利用CPU,但是其代价为较大的内存占用以及麻烦的进程间通信,在这样的前提下产生了多线程。
多进程和多线程的区别在于,多线程中的子线程可以访问共享内存区域中的数据,简化了线程间的通信,提高了程序特别是用户界面程序的响应。但是在使用线程中要注意同时访问变量的问题,应该使用一定的机制(比如互斥锁mutex),让各个子线程以串行的方式访问并修改内存中的数据,避免出现内存使用冲突的问题。
多个线程能够共享同一个进程代码段,共有数据(用来通讯),进程打开的文件描述符,信号的处理器,进程当前目录,进程用户ID等。当然每一个线程也有其独有的东西:线程ID,寄存器值,堆栈,错误返回码,信号屏蔽码和优先级。
创建线程需要pthread.h头文件,连接时要使用libpthread.a的库,这里简单讲解几个和线程有关的函数。
Int pthread_create(pthread_t *tid, const pthread_attr_r *attr, void *(*func)(void*), void *arg)
四个输入参数依次为线程ID标识符,创建线程的属性,线程将要执行的函数-返回void类型指针,以及传递给函数的参数(这里,参数需是void类型的,int等类别的参数需要进行转换,多参数传递建议使用结构体)。
Int pthread_join(pthread_t tid, void **status)
等待tid的线程终止,然后再执行下面的命令。Status指针内将保存线程的返回值。
pthread_t pthread_self(void)
返回线程ID。
pthread_cancel结束其他它由同一个进程产生的线程,这里注意,当子线程阻塞在I/O时(比如,read等待),是不可以用这个函数退出次线程的,这时就要考虑使用非阻塞的I/O获得较高的控制权和灵活性。
pthread_
您可能关注的文档
- 5章-食品浓缩与结晶.ppt
- 6 模板构造和安装.doc
- 6-2 线性系统矫正方法.ppt
- 6-5 归一化与去归一化.ppt
- 6-1软膏与软胶囊.ppt
- 6-2 孔常规加工方法.ppt
- 6-离子交换树脂和再生装置改造.ppt
- 6 控制系统综合和校正.ppt
- 5珠宝首饰美学原理和设计基础.ppt
- 6.4 电力系统三相短路实用计算.doc
- 浙江衢州市卫生健康委员会衢州市直公立医院高层次紧缺人才招聘11人笔试模拟试题参考答案详解.docx
- 浙江温州泰顺县退役军人事务局招聘编外工作人员笔试备考题库及参考答案详解一套.docx
- 江苏靖江市数据局公开招聘编外工作人员笔试模拟试题及参考答案详解.docx
- 广东茂名市公安局电白分局招聘警务辅助人员40人笔试模拟试题带答案详解.docx
- 江苏盐城市大丰区住房和城乡建设局招聘劳务派遣工作人员4人笔试模拟试题带答案详解.docx
- 浙江舟山岱山县东沙镇人民政府招聘笔试模拟试题及参考答案详解1套.docx
- 最高人民检察院直属事业单位2025年度公开招聘工作人员笔试模拟试题含答案详解.docx
- 浙江金华市委宣传部、中共金华市委网信办所属事业单位选调工作人员笔试备考题库及答案详解1套.docx
- 广东深圳市党建组织员招聘40人笔试模拟试题及答案详解1套.docx
- 江苏南京水利科学研究院招聘非在编工作人员4人笔试模拟试题及参考答案详解.docx
最近下载
- 《无人机测绘技术》项目3任务4无人机激光点云数据处理.pptx VIP
- 2023甘肃培黎职业学院招聘12人笔试备考试题及答案解析.docx VIP
- 《广告策划实务》全套教学课件.pptx
- 环境污染事故放射性气溶胶扩散的应急控制及消除方法.docx VIP
- 2024-2025学年小学信息技术(信息科技)泰山版2024六年级上册教学设计合集.docx
- 化学反应热力学与热平衡的实验研究的探究与研究.pptx VIP
- 华荣QJZ-2×□SF煤矿风机用隔爆兼本质安全型双电源真空电磁起动器.doc
- 黄旭华精神课件PPT.pptx VIP
- 孕产妇产后康复指导考核试卷.docx VIP
- 《罗斯福新政》2教学设计.doc VIP
文档评论(0)