linux C语言实现网络通信简介.ppt_第1页
linux C语言实现网络通信简介.ppt_第2页
linux C语言实现网络通信简介.ppt_第3页
linux C语言实现网络通信简介.ppt_第4页
linux C语言实现网络通信简介.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、介绍了实现网络通信的Linux C语言,主要内容,TCP/IP协议概述套接字基本编程领域套接字,第一,TCP/IP协议概述,OSI参考模型和TCP/IP参考模型,它们分别负责应用程序的网络访问和通过端口号识别不同的进程。负责端到端通信会话的连接和建立。传输协议的选择取决于数据传输模式。它负责将数据帧封装到IP数据包中,并运行必要的路由算法。负责将二进制流转换为数据帧,并发送和接收数据帧。数据帧是独立的网络信息传输单元。传输控制协议:为应用程序提供了可靠的通信连接,并实现了从一个应用程序到另一个应用程序的数据传输。它适用于一次传输大量数据,也适用于需要响应的应用。建立一个TCP连接需要三次握手。

2、基本过程是服务器首先建立一个windows套接字并等待客户端的连接请求,然后依次执行三次握手。第一次握手:当客户端调用connect进行主动连接请求时,客户端发送一个SYN,告知服务器客户端将在连接中发送的数据的初始序列号;第二次握手:当服务器收到这个SYN时,它也向客户端发送一个SYN,其中包含服务器将在同一连接中发送的数据的初始序列号;三次握手:最后,客户发回一个带有确认序列号和确认号的数据段,以确认服务器发送的SYN。此时,建立了一个TCP连接。它是一种无连接协议,不需要像TCP那样通过三次握手建立连接。它适用于一次传输少量数据,其可靠性由应用层负责。同时,UDP应用程序可以用作应用程序

3、的客户端或服务器。UDP比TCP更能解决实时性问题,许多客户端/服务器网络应用,包括网络视频会议系统,都使用UDP协议。UDP数据头,UDP,2。Socket基本编程,socket概述,socket概念:Linux中的网络编程是通过socket接口实现的。套接字是一种特殊的输入/输出接口、文件描述符和进程间的通用通信机制。它不仅可以实现本地机器上进程之间的通信,还可以实现不同机器上进程之间的通信。套接字类型:(1)流套接字(SOCK_STREAM): TCP协议;(2)数据报套接字:UDP协议;(3)原始套接字:主要用于开发一些协议。流套接字和数据报套接字的区别在于前者必须在通信之前建立连接,

4、并且只能与一方通信;后者在通信之前不需要建立连接,并且可以与多方通信。socket,bind,recv/read,close,close,recv/read,connect,socket,send/write,send/write,传输数据,接受,侦听,bind,等待客户连接请求的到达。三次握手过程建立TCP连接,服务器端,客户端,TCP协议套接字编程流程图,套接字,recvfrom,sendto,bind,close,close,recv,connect,socket,send,send/sendto,recv/recvfrom,连接后,还可以使用读写,or,来传输数据,以及UDP soce

5、t编程流程图,套接字编程的基本功能,socket():用来建立套接字连接。您可以指定套接字类型和其他信息。建立套接字连接后,可以初始化socket dr或socketaddr _ in来保存已建立的套接字信息。Bind():用于将本地IP地址绑定到端口号,主要用于TCP连接,但不用于UDP连接。Listen():用于创建一个等待队列,其中存储了未处理的客户端连接。Connect():在TCP中,它用于建立与服务器的连接,而在UDP中,connect()的功能是限制套接字只能与指定方通信,即在使用connect之前只能与任意地址通信,在连接之后只能与一方通信。在TCP中,一个套接字只能连接一次,

6、而在UDP中,一个套接字可以连接多次。accept():用于等待和接收客户端的连接请求。它通常从等待队列中取出第一个未处理的连接请求。Send()和recv():分别用于发送和接收数据,可用于TCP或UDP。Sendto()和recvfrom():功能类似于send()和recv()。当在TCP中使用时,后几个与地址相关的参数不起作用,相当于send()和recv();当在UDP中使用时,它可以在不使用连接()的情况下使用。这两个功能可以自动找到指定的地址并连接。套接字地址数据结构,结构sockaddr无符号短sa _ family/*协议系列*/char sa _ data 14;/*协议地

7、址,包括套接字的IP地址和端口号。*/;struct sockaddr _ in short int sa _ family;/*协议系列*/无符号短int sin _ port/*端口号*/struct in _ addr sin _ addr;/*IP地址*/无符号字符sin _ zero8/*填充0以保持与结构sockaddr *相同的大小/;套接字()函数:建立套接字连接,绑定()函数:将本地IP地址绑定到端口号,监听()函数:创建等待队列,连接()函数:建立与服务器的连接或限制套接字仅与指定方通信。accept()函数:等待并接收来自客户端的连接请求,send()函数发送数据,rec

8、v()函数接收数据,sendto()函数,recvfrom()函数,第三,域套接字。由于流水线只能实现与相关进程的进程间通信,其使用受到很大限制,著名的流水线解决了这个问题。然而,不管它是一个管道还是一个著名的管道,只能实现单向通信(当只创建一个管道时)。套接字不仅可以实现网络中不同主机之间的通信,还可以实现同一主机不同进程之间的通信,建立的通信是双向通信。使用套接字的进程间通信是通过指定通信域为PF_Unix,即Unix域套接字来实现的。Unix域套接字是一个通过套接字API实现的简单协议家族。事实上,它并不代表网络协议;它只能连接到同一台机器上的插座。它提供了一个灵活的IPC机制。它的地址是它所在的文件系统的路径名,套接字在创建后与路径名绑定。用于表示Unix域地址的套接字文件可以使用stat(),但不能通过open()打开,应该由套接字API操作。Unix域套接字是面向连接的,并且为每个套接字连接建立一个新的通信通道。服务器可以同时处理多个连接,但是每个连接都有不同的文件描述符。此属性使Unix域套接字能够比命名管道更好地适应IPC任务。域套接字的功能形式是intsocket (int domain,int type,int protocol);套接字函数中的域参数用于指定通信域。当域参数采用PF_UNIX时,它意味着为UNIX域创建一个套接字。同一个机器上不同进程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论