Linux系统编程(第七章)套接字 socket.pdf
《Linux系统编程(第七章)套接字 socket.pdf》由会员分享,可在线阅读,更多相关《Linux系统编程(第七章)套接字 socket.pdf(34页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第七章:套接字第七章:套接字SOCKET 目标:目标:本章旨在向学员介绍Linux系统 下套接字的使用及方法:本章旨在向学员介绍Linux系统 下套接字的使用及方法:1)掌握面向连接的套接字编程 方法2)掌握非连接的套接字编程方 法)掌握面向连接的套接字编程 方法2)掌握非连接的套接字编程方 法时间:时间:3 学时教学方法:讲授学时教学方法:讲授PPT、实例练习、实例练习7.1 关于关于SOCKET功能功能为不同机器上的两个进程之间提供通信 机制为不同机器上的两个进程之间提供通信 机制实现实现在硬件层通过网络设备连接,在软件层 通过标准的网络协议集TCP或UDP在硬件层通过网络设备连接,在软件
2、层 通过标准的网络协议集TCP或UDP socket提供了不同主机进程间数据通信的机制7.1 关于关于SOCKET进程D进程D进程C进程C进程B进程B进程A进程A进程D进程D进程C进程C进程B进程B进程A进程Asocketsocket7.2 套接字套接字 IP地址返回值in_addr_t调用成功后,将返回IP地址,错误返回-1例子:in_addr_t server;server=inet_addr(“192.168.0.1”);#include in_addr_t inet_addr(const char*ip_address);7.2 套接字套接字 端口网络套接字结构定义如下:#includ
3、e struct sockaddr_insa_family_t sin_family;/*internet address family*/in_port_t sin_port;/*port number*/struct in_addr sin_addr;/*holds the IP address*/unsigned char sin_zero8 /*filling*/;7.2 套接字套接字 主机字节序与网络字节序这些函数将16位和32位整数在主机字节序和网络字节序之间进行 转换#include unsigned long int htonl(unsigned long int hostlo
4、ng);unsigned short int htons(unsigned short int hostshort);unsigned long int ntohl(unsigned long int netlong);unsigned short int ntohs(unsigned short int netshort);server_address.sin_addr.s_addr=htonl(INADDR_ANY);server_address.sin_port=htons(9734);7.2 套接字套接字 地址转换打印函数inet_ntoa将网络字节转换为可打印四点表示法格式的字符串
5、gethostname函数获得当前主机的名字,存入name参数中#include char*inet_ntoa(struct in_addr in)#include int gethostname(char*name,int namelength);7.2 套接字套接字 socket函数:功能为创建通信连接句柄参数domain:指定套接字的类型AF_INET 网络上的套接字AF_UNIX 进程都运行于同一台机器时参数type:指定了建立的套接字是用于连接模型还是无连接模型SOCK_STREAM 连接模型,默认TCP协议SOCK_DGRAM 无连接模型,默认UDP协议参数protocol:指定所
6、使用的协议该值一般被设为0,表示默认协议#include int socket(int domain,int type,int protocol);7.2 套接字套接字 bind(绑定)把电脑上真正的网络地址与一个套接字标识符关联起来参数sockfd:是从socket系统调用返回的文件描述符参数address:指向套接字结构的指针。参数add_len:存储套接字实际使用的地址指针的大小bind调用成功返回0,错误返回-1#include#include int bind(int sockfd,const struct sockaddr*address,size_t add_len);7.2 套
7、接字套接字 listen(监听)绑定之后,在任何客户端系统可以连接到新建立的服务器端点之 前,服务器必须设定为等待连接。参数sockfd:sock系统调用返回的文件描述符参数queue_size:允许多少个连接请求排入队列#include int listen(int sockfd,int queue_size);7.2 套接字套接字 accept(接受连接)当服务器收到客户端connect请求时,必须建立一个全新的套接字 来处理这个特定的通信。第一个套接字只用来建立通信,第二 个套接字由accept完成。参数sockfd:socket系统调用返回的文件描述符参数address:将客户端信息填
8、充。参数vadd_len:保存实际复制的字节数。#include#include int accept(int sockfd,struct sockaddr*address,size_t*add_len);7.2 套接字套接字 connect(请求连接)客户程序通过一个未命名套接字和服务器监听套接字之间建立连 接的方法来连接到服务器。通过connect调用来完成参数socket:指定的套接字将连接到参数address指定服务器套接字参数address_len:指向结构长度由参数address_len指定#include int connect(int socket,const struct s
9、ockaddr*address,size_t address_len);7.2 套接字套接字 接收数据recv调用从指定的文件描述符读取数据,存放到buffer中,buffer的长 度是length。flags参数:影响数据被接收的方式:MSG_PEEK 进程查看数据但并不接收。MSG_OOB 普通数据被忽略,进程接收“带外数据”,例如中断信号MSG_WAITALL recv调用只有接收到足够长度的数据时才返回#include#include ssize_t recv(int sockfd,void*buffer,size_t length,int flags);7.2 套接字套接字 发送数据
10、flags参数影响数据发送的方式:MSG_OOB 发送“带外数据”MSG_DONTROUTE 发送消息时忽略任何基础协议的路由条 件#include#include ssize_t send(int sockfd,const void*buffer,size_t length,int flags);7.2 套接字套接字 面向非连接的发送与接受函数参数send_addr设置为NULL recvfrom调用与recv调用工作方式相 同参数message为接受或发送的数据,length为读写缓冲区的长度参数flags与recv调用的参数相同最后的参数为发送或接受的地址ssize_t recvfrom
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux系统编程第七章套接字 socket Linux 系统 编程 第七 套接
限制150内