linux 网络编程 socket编程.pdf
《linux 网络编程 socket编程.pdf》由会员分享,可在线阅读,更多相关《linux 网络编程 socket编程.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux 下的下的 socket 网络网络编程编程 一一、基本数据结构基本数据结构 socket 中最常见的数据结构有 in_addr、sockaddr_in、sockaddr。1、in_addr,用来存储 32 位的 IP 地址,其 POSIX 标准结构体定义如下:struct in_addr uint32_t s_addr;/*32-bit IPv4 address,network ordered*/;【例 1.1】IP 地址的设定 in_addr test;/INADDR_ANY是一个宏,将当前服务程序绑定到所有地址 test.s_addr=htonl(INADDR_ANY);/ine
2、t_addr()函数的作用是将字符串形式的IP地址转换成整数值 test.s_addr=inet_addr(“192.168.0.1”);2、sockaddr_in,用于存储 internet 协议族、端口号和 IP 地址,其结构体原型如下:struct sockaddr_in short sin_family;/AF_INET u_short sin_port;/16-bit port struct in_addr sin_addr;/32-bit network ordered IP address char sin_zero8;/reserved;【例 1.2】服务器端地址设定 stru
3、ct sockaddr_in serverAddr;memset(&serverAddr,0,sizeof(serverAddr);/清零 serverAddr.sin_family=AF_INET;/采用TCP/IP协议 serverAddr.sin_port=htons(5050);/端口号 serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);/服务程序绑定到所有地址【例 1.3】客户端连接服务器 struct sockaddr_in serverAddr;memset(&serverAddr,0,sizeof(serverAddr);/清零 serv
4、erAddr.sin_family=AF_INET;/采用TCP/IP协议 serverAddr.sin_port=htons(5050);/服务器端口号 serverAddr.sin_addr.s_addr=inet_addr(“192.168.0.1”);/服务器IP地址 3、sockaddr,通用套接字地址结构 在诸如 bind()等函数的参数类型中使用,其实质为定义一个通用的类型接口。其原型为:struct sockaddr uint8_t sa_len;sa_family_t sa_family;/address family:AF_xxx value char sa_data14;
5、/protocol-specific address;二二、常用套接字函数常用套接字函数 1、创建套接字创建套接字#include#include int socket(int domain,int type,int protocol);函数返回值函数返回值:创建新的套接字成功则返回新分配的套接字号,否则返回-1 参数说明参数说明:domain 常见取值如下:AF_UNIX UNIX 域协议(文件系统套接字)AF_INET ARPA 因特网协议(UNIX 网络套接字)AF_ISO ISO 标准协议 AF_NS 施乐(Xerox)网络系统协议 AF_IPX Novell IPX 协议 AF_AP
6、PLETALK Appletalk DDS type 常见取值如下:SOCK_STREAM 用 TCP 通信 SOCK_DGRAM 用 UDP 通信 SOCK_RAW 原始套接字,作用在网络层,支持对 IP 包进行操作 protocol,用于指定套接字所采用的特定协议,如果不希望指定任何的协议,可将该参数置为 0,即使用默认连接方式 2、绑定套接字绑定套接字 将一个套接字号与一个特定的地址(包括 IP 与端口号)信息关联起来,以便当客户端请求时系统可以找到对应的服务程序处理客户端的请求。#include int bind(int sockfd,const struct sockaddr*add
7、ress,size_t address_len);函数返回值函数返回值:绑定成功返回 0,否则返回-1 并置 errno 为下表中的一个值 EBADF 文件描述符无效 ENOTSOCK 文件描述符对应的不是一个套接字 EINVAL 文件描述符对应的是一个已命名的套接字 EADDRNOTAVAIL 地址不可用 EADDRINUSE 地址已经绑定到了一个套接字 参数说明参数说明:sockfd:用于指定需要关联的套接字。address:需要关联的地址(IP 地址+端口号)。address_len:地址的长度,一般用 sizeof(sockaddr)填充。【例 2.1】函数应用举例,创建一个地址信息,
8、并且将服务套接字进行关联。int serverSock;struct sockaddr_in serverAddr;if(serverSock=socket(AF_INET,SOCK_STREAM,0)0)/创建套接字 perror(“socket()error!”);return-1;memset(&serverAddr,0,sizeof(serverAddr);/清零 serverAddr.sin_family=AF_INET;/协议族 serverAddr.sin_port=htons(8080);/端口号 serverAddr.sin_addr.s_addr=htonl(INADDR_
9、ANY);/所要绑定的 IP 地址/关联套接字 if(bind(serverSock,(struct sockaddr*)&serverAddr,sizeof(serverAddr)0)perror(“bind()error!”);return-1;3、创建套接字服务队列创建套接字服务队列 为了能够在套接字上接受进入的连接,服务器程序必须创建一个队列用来保存未处理的请求。他用 listen()系统调用来完成这一工作。listen()函数的作用则是在指定的套接字上监听,以被动的方式等待客户端的连接请求。#include int listen(int sockfd,size_t backlog);
10、函数返回值函数返回值:绑定成功返回 0,否则返回-1 并置 errno 为 EBADF、EINVAL、ENOTSOCK中的一个值,含义与前面的 bind 系统调用中描述的一样。参数说明参数说明:sockfd:用于要关联的服务套接字 backlog:请求队列中的最大长度,一般建议设为 5。4、接受连接接受连接 一旦服务器程序在创建并命名套接字以后,它就可以通过用 accept 系统调用来等待客户建立对该套接字的连接,无客户端的连接请求时则阻塞,一直在指定的端口监听。#include int accept(int sockfd,struct sockaddr*client_address,size
11、_t*clien _address_len);函数返回值函数返回值:若函数调用成功则返回新的客户端的套接字,失败则返回-1。参数说明参数说明:sockfd:当前服务套接字。client_address:用于保存客户端的地址信息,若不关心客户端,则可置为 NULL。client_address_len:指向客户端地址长度变量的指针,若不关心客户端,则可置为 NULL。【例 2.2】应用举例:等待客户端连接,并作出相应 while(1)sockaddr_in clientAddr;socklen_t clientAddr_len=sizeof(clientAddr);int clientfd=ac
12、cept(serverSock,(struct sockaddr*)&clientAddr,&clientAddr_len);if(clintfd 0)perror(“accept error!”);return-1;/do something for the client request/注意,客户端套接字也是和服务套接字一样的资源,应记得释放 close(clientfd);5、请求连接请求连接 客户程序通过用connect系统调用来将客户端的一个未命名套接字和服务器监听套接字建立连接,从而连接到服务器。#include int accept(int sockfd,struct socka
13、ddr*server_address,size_t server _address_len);函数返回值函数返回值:连接成功返回 0,否则返回-1 并置 errno 为下表中的一个值 EBADF 传递给 sockfd 的文件描述符无效 EALREADY 该套接字上已经有一个正在进行中的连接 ETIMEOUT 连接超时 ECONNREFUSED 连接请求被服务器拒绝 参数说明参数说明:sockfd:当前客户端套接字。server_address:服务器地址。server _address_len:服务器地址的长度,一般用 sizeof(server_address)填充。6、用于用于 TCP 连
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 网络编程 socket编程 网络 编程 socket
限制150内