linux socket 常用函数

上传人:第*** 文档编号:32687871 上传时间:2018-02-12 格式:DOCX 页数:9 大小:134.20KB
返回 下载 相关 举报
linux socket 常用函数_第1页
第1页 / 共9页
linux socket 常用函数_第2页
第2页 / 共9页
linux socket 常用函数_第3页
第3页 / 共9页
linux socket 常用函数_第4页
第4页 / 共9页
linux socket 常用函数_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《linux socket 常用函数》由会员分享,可在线阅读,更多相关《linux socket 常用函数(9页珍藏版)》请在金锄头文库上搜索。

1、linux socket 常用函数 收藏 = TCP = TCP_Server socket() bind()listen() accept()write()read()close() 和 shutdown() TCP_Client socket() connect() send() 和 recv() close() 和 shutdown() = UDP = UDP_Server socket()bind()sendto() 和 recvfrom() close() 和 shutdown() UDP_Client socket()sendto() 和 recvfrom() close() 和

2、shutdown() getpeername() gethostname()-socket() 我们使用系统调用 socket()来获得文件描述符:#include#includeint socket(int domain, int type, int protocol); 第一个参数 domain 设置为“AF_INET ”。第二个参数是套接口的类型:SOCK_STREAM 或SOCK_DGRAM。第三个参数设置为 0。系统调用 socket()只返回一个套接口描述符,如果出错,则返回-1。-bind() 一旦你有了一个套接口以后,下一步就是把套接口绑定到本地计算机的某一个端口上。但如果你只

3、想使用 connect()则无此必要。下面是系统调用 bind()的使用方法:#include#includeintbind(int sockfd, struct sockaddr* my_addr, int addrlen); 第一个参数 sockfd 是由 socket()调用返回的套接口文件描述符。第二个参数 my_addr 是指向数据结构 sockaddr 的指针。数据结构 sockaddr 中包括了关于你的地址、端口和 IP 地址的信息。第三个参数 addrlen 可以设置成 sizeof(structsockaddr)。下面是一个例子:view plaincopy to clipb

4、oardprint?#include #include #include #define MYPORT 3490 main() int sockfd; struct sockaddr_in my_addr; sockfd=socket(AF_INET,SOCK_STREAM,0); /*do someerror checking!*/ my_addr.sin_family=AF_INET; /*hostbyteorder*/ my_addr.sin_port=htons(MYPORT); /*short,network byte order*/ my_addr.sin_addr.s_addr=

5、inet_addr(132.241.5.10); bzero( /*zero the rest of the struct*/ /*dont forget your error checking for bind():*/ bind(sockfd,(struct sockaddr*) . #include#include#include#define MYPORT 3490main()int sockfd;struct sockaddr_in my_addr;sockfd=socket(AF_INET,SOCK_STREAM,0); /*do someerror checking!*/my_a

6、ddr.sin_family=AF_INET; /*hostbyteorder*/my_addr.sin_port=htons(MYPORT); /*short,network byte order*/my_addr.sin_addr.s_addr=inet_addr(132.241.5.10);bzero( /*zero the rest of the struct*/*dont forget your error checking for bind():*/bind(sockfd,(struct sockaddr*). 如果出错,bind() 也返回-1 。如果你使用 connect()系

7、统调用,那么你不必知道你使用的端口号。当你调用 connect()时,它检查套接口是否已经绑定,如果没有,它将会分配一个空闲的端口。-connect() 系统调用 connect()的用法如下:#include#includeint connect(int sockfd, struct sockaddr * serv_addr, int addrlen); 第一个参数还是套接口文件描述符,它是由系统调用 socket()返回的。第二个参数是 serv_addr 是指向数据结构 sockaddr 的指针,其中包括目的端口和 IP 地址。第三个参数可以使用 sizeof(structsockadd

8、r)而获得。下面是一个例子:view plaincopy to clipboardprint?#include #include #include #define DEST_IP 132.241.5.10 #define DEST_PORT 23 main() int sockfd; struct sockaddr_in dest_addr; /*will hold the destination addr*/ sockfd=socket(AF_INET, SOCK_STREAM, 0); /*do some error checking!*/ dest_addr.sin_family=AF_

9、INET; /*hostbyteorder*/ dest_addr.sin_port=htons(DEST_PORT); /*short,network byte order*/ dest_addr.sin_addr.s_addr=inet_addr(DEST_IP); bzero( /*zero the rest of the struct*/ /*dontforgettoerrorchecktheconnect()!*/ connect(sockfd,(struct sockaddr *) . #include#include#include#define DEST_IP 132.241.

10、5.10#define DEST_PORT 23main()int sockfd;struct sockaddr_in dest_addr; /*will hold the destination addr*/sockfd=socket(AF_INET, SOCK_STREAM, 0); /*do some error checking!*/dest_addr.sin_family=AF_INET; /*hostbyteorder*/dest_addr.sin_port=htons(DEST_PORT); /*short,network byte order*/dest_addr.sin_ad

11、dr.s_addr=inet_addr(DEST_IP);bzero( /*zero the rest of the struct*/*dontforgettoerrorchecktheconnect()!*/connect(sockfd,(struct sockaddr *). 同样,如果出错,connect()将会返回 -1。-listen() 如果你希望不连接到远程的主机,也就是说你希望等待一个进入的连接请求,然后再处理它们。这样,你通过首先调用 listen(),然后再调用 accept()来实现。系统调用 listen()的形式如下:intl isten(int sockfd, in

12、t backlog); 第一个参数是系统调用 socket()返回的套接口文件描述符。第二个参数是进入队列中允许的连接的个数。进入的连接请求在使用系统调用 accept()应答之前要在进入队列中等待。这个值是队列中最多可以拥有的请求的个数。大多数系统的缺省设置为 20。你可以设置为 5 或者 10。当出错时,listen()将会返回-1 值。当然,在使用系统调用 listen()之前,我们需要调用 bind()绑定到需要的端口,否则系统内核将会让我们监听一个随机的端口。所以,如果你希望监听一个端口,下面是应该使用的系统调用的顺序:socket();bind();listen();/*accep

13、t()goeshere*/ -accept() 系统调用 accept()比较起来有点复杂。在远程的主机可能试图使用 connect()连接你使用listen()正在监听的端口。但此连接将会在队列中等待,直到使用 accept()处理它。调用accept()之后,将会返回一个全新的套接口文件描述符来处理这个单个的连接。这样,对于同一个连接来说,你就有了两个文件描述符。原先的一个文件描述符正在监听你指定的端口,新的文件描述符可以用来调用 send()和 recv()。调用的例子如下:#includeintaccept(int sockfd, void *addr, int *addrlen);

14、第一个参数是正在监听端口的套接口文件描述符。第二个参数 addr 是指向本地的数据结构sockaddr_in 的指针。调用 connect()中的信息将存储在这里。通过它你可以了解哪个主机在哪个端口呼叫你。第三个参数同样可以使用 sizeof(structsockaddr_in)来获得。如果出错,accept()也将返回-1。下面是一个简单的例子:view plaincopy to clipboardprint?#include #include #include #define MYPORT 3490 /*theportuserswillbeconnectingto*/ #define BACKLOG 10 /*howmanypendingconnectionsqueuewillhold*/ main() int sockfd, new_fd; /*listenonsock_fd,newconnectio

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号