您的位置:首页 > 理论基础 > 计算机网络

网络编程常见函数

2016-11-18 21:10 183 查看
进行Socket编程的常用函数有:

Socket :  创建一个socket

Bind: 用于绑定IP地址和端口号到socket

Connect: 该函数用于绑定之后的client端与服务器建立连接

listen:设置能处理的最大连接要求,Listen()并未开始接收连线,只设置socket为listen模式

accept:用来接受socket连接

send:发送数据

recv:接收数据

 

1.socket

函数的作用:创建套接字,建立一个新的socket套接字

函数的原型:intsocket(int family, int type, int protocol);

函数的参数:family:表示何种地址类型

                                        AF_INET:IPv4;AF_INET6:Ipv6

                           type:SOCKET_STREAM:TCP面向数据流

                                      SOCKET_DGRAM:UDP使用不连续不可信赖的数据包链接

                                      SOCKET_RAW:提供原始网络协议

                           protocol:传输协议编号(设为0)

返回值:成功返回socket套接字描述符;出错返回-1。

头文件:#include<sys/socket.h>

socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1

    对于IPv4,family参数指定为AF_INET

    对于TCP协议,type参数指定SOCK_STREAM,表示面向流的传输协议如果是UDP协议,则type参数指定为SOCK_DGRAM,表示面向数据报的传输协议

   protocol参数的介绍从略,指定为0即可

2.bind

函数的作用:绑定IP地址

函数的原型:intbind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);

函数的参数:sockfd:socket套接字描述符

                          myaddr:主机地址

                          addrlen:sockaddr的地址长度

头文件:#include<sys/socket.h>

                 #include<sys/types.h>

        服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接,因此服务器需要调用bind绑定一个固定的网络地址和端口号.bind()成功返回0,失败返回-1。

bind()的作用是将参数sockfd和myaddr绑定在一起,使   sockfd这个用于网络通讯的文件描述符监听myaddr所描述的地址和端口号。

struct sockaddr*是一个通用指针类型,myaddr参数实际上可以接受多种协议的sockaddr结构体,而它们的长度各不相同,所以需要第三个参数addrlen指定结构体的长度。

3.connect

函数的作用:建立socket连接,通常客户端连接服务器使用

函数的原型:intconnect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);

函数的参数:servaddr:表示连接的服务器的IP地址

                          addrlen:struct sockaddr的长度

返回值:成功返回0,出错返回-1。

客户端需要调用connect()连接服务器,connect和bind的参数形式一致,区别在于bind的参数是自己的地址,而connect的参数是对方的地址.

connect()成功返回0,出错返回-1。

4.listen

函数的作用:聆听网络,等待连接

函数的原型:intlisten(int sockfd, int backlog);

函数的参数:sockfd:描述符

                          backlog:允许接入的客户端数目

返回值:成功返回0, 出错返回-1。

listen并没有连线,只是设置socket的listen模式而已,真正连接的是accept

5.accept

函数的作用:接受网络连接,客户端连接(三次握手在这个地方)

函数的原型:intaccept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);

函数的参数:addr:连接成功,填充远端客户机的地址

                          addrlen:struct sockaddr的长度

返回值:成功返回新的sock_fd,失败返回-1。

        三方插手完成后,服务器调用accept()接受连接,如果服务器调用accept()时还没有客户端的连接请求,就阻塞等待直到有客户端连接上来,cliaddr是一个传出参数,accept()返回时传出客户端的地址和端口号.addrlen参数是一个传入传出参数(value-result argument),传入的是调用者提供的缓冲区cliaddr的长度以避免缓冲区溢出问题,传出的是客户端地址结构体的实际长度(有可能没有占满调用者提供的缓冲区)。

如果给cliaddr参数传NULL,表示不关心客户端的地址。

6.send

函数的作用:经过socket传送数据,向对方发送数据

函数的原型:intsend(int sockfd, const void *msg, int len, unsigned int flags);

函数的参数:sock_fd:建立起来的socket连接描述符,连接远方的IP地址

                          msg:发送的数据

                          len:数据长度

                          flags:设为0

返回值:成功返回实际传送出去的字节数,出错返回-1。

7.recv

函数的作用:经过socket接收数据

函数的原型:intrecv(int sock_fd, void *buf, int len, unsigned int flags);

函数的参数:sock_fd:accept以后的socket套接字描述符

                          buf:存放地址

                          len:接收数据的最大长度

                          flags:设为0

返回值:成功返回接收的字符数,出错返回-1。

8.sendto

函数的作用:传送socket数据,UDP使用较多

函数的原型:intsendto(int sockfd, const void *msg, int len, unsigned int flags, const structsockaddr *toaddr, int tolen);

函数的参数:sock_fd:套接字描述符

                          msg:发送的消息内存

                          len:消息的长度

                          toaddr:要发送消息的目的地址

                          tolen:sizeof(struct sockaddr)

返回值:成功返回实际传送的字符数,出错返回-1。

9.recvfrom

函数的作用:从socket接收数据

函数的原型:intrecvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr*from, int *fromlen);

函数的参数:同sendto

返回值:成功返回接收的字节数,出错返回-1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: