网站大量收购独家精品文档,联系QQ:2885784924

《LinuxC从入门到精通》明日科技网络编程.ppt

《LinuxC从入门到精通》明日科技网络编程.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《LinuxC从入门到精通》明日科技网络编程

UDP套接字编程 本讲大纲: 数据传输系统调用 基于UDP协议的C/S机制的网络通信的工作原理 基于UDP的简单网络通信实例 数据传输系统调用 基于UDP的网络编程中,主要用到的函数有socket()、bind()、sendto()、recvfrom()和close()。 在前面的套接字编程原理一节中,已经对创建套接字函数socket()、绑定套接字函数bind()和关闭套接字函数close()进行了介绍,在此对用于无连接的数据报套接字方式下的数据传输的函数sendto()和函数recvfrom()进行介绍。 ?注意:sendto()函数和recvfrom()函数可用于面向连接的或无连接的套接字通信中。 1.发送数据 函数sendto()用于向指明目的地址的远端机器发送数据。该函数的定义形式如下: #include sys/types.h #include sys/socket.h ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); 参数s代表套接字描述符,参数buf用于指向发送信息的缓冲区的指针,参数len是发送的信息的长度,参数flags通常会设置为0,代表的是相关控制参数,主要用于控制是否接收数据以及是否预览报文。参数to为存放接收处的信息的指针,参数tolen是接收方地址的大小。 函数如果调用成功,返回值为发送的字节数,否则返回值为-1,并设置相应的errno值。 说明:如果sendto()函数用于面向连接的网络通信时,套接字类型为SOCK_STREAM或SOCK_SEQPACKET。此时参数to指向NULL,参数tolen为0,若不为此值,就会出现错误信息提示。 2.接收数据 函数recvfrom()实现了接收消息。该函数的定义形式如下: #include sys/types.h #include sys/socket.h ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); 参数s为套接字描述符,参数buf指向接收信息的指针,参数len代表缓冲区的最大长度,参数flag通常设置为0,表示相关控制参数,参数from表示发送此信息处的地址指针,参数fromlen指向发送处地址大小的指针。 基于UDP协议的C/S机制的网络通信的工作原理 UDP是面向无连接的网络通信,并不需要像TCP套接字编程那样需要通过connect()与服务器建立连接,然后调用listen()函数使服务器处于监听状态,在通过accept()函数接收客户端的连接请求。UDP套接字编程,只需要创建用于通信的套接字,然后在服务器端绑定端口,然后就可以实现数据的传输。 在绑定了地址信息之后,进行数据传输时,服务器会阻塞recvfrom()函数,等待客户端调用sendto()函数发送数据,同时客户端的recvfrom()被阻塞,然后,服务器会调用recvfrom()函数接收数据,接着向客户端作出应答,同时,服务端的recvfrom()被阻塞,接着,客户端调用recvfrom()接收数据。数据传输结束时,需要调用close()函数结束套接字。 UDP协议的这种C/S机制的通信原理可以理解为如图所示。 原始套接字编程 本讲大纲: 原始套接字定义 原始套接字系统调用 原始套接字的发送与接收 报文处理 原始套接字定义 前面介绍的TCP和UDP的套接字通信几乎涵盖了TCP/IP应用的全部,但是计算机并不是只存在TCP和UDP两种单一的协议下的通信方法,例如,对于一个自定义的IP包,或者一个ICMP协议包,又是如何实现传送的呢? 原始套接字就允许对这些较底层次的协议(IP、ICMP、IGMP)进行直接访问。 原始套接字定义 原始套接字编程是一种非面向连接的、C/S传输方式的网络编程,使用原始套接字编程进行服务器端与客户端的通信前,首先要创建各自的套接字,然后对相应的套接字进行数据传输,在数据传输过程中,需要使用sendto()函数和recvfrom()函数进行发送与接收,在发送与接收函数中设置相应的IP地址。 原始套接字往往应用于高级网络编程,如比较流行的网络嗅探器(sniffer)、拒绝服务攻击(DOS)、IP欺骗等等都可以实现,并且还可以通过原始套接字来模拟IP的一些实用工具,如Ping命令。 原始套接字系统调用 1.创建函数 原始套接字的创建方法与标准套接字的创建方法是类似的,只是在创建时,参数选择的选项不同,如T

文档评论(0)

little28 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档