c语言socket套接口API

来源:互联网 发布:知乎 我的队友四条狗 编辑:程序博客网 时间:2024/05/01 23:26

 c语言socket通信包含以下几个最常用的函数。根据使用方(客户端或服务端)有不同的调用方法,简单示图如下:

 

1、socket()

要建立一个网络连接,不论客户端或服务端首先都要调用socket()函数建立一个网络通信的套接口:

#include<sys/types.h>

#include<sys/socket.h>

int socket(int domain, int type, int protocol);

第一个参数domain为网络通信的协议族,使用ipv4则设为AF_INET,ipv6则设为AF_INET6。

第二个参数是套接口的类型:SOCK_STREAM或SOCK_DGRAM。

第三个参数表示通信协议,一般设置为0。

正常返回一个套接口描述符(文件描述符),出错,则返回-1。

2、connect()

客户端用来连接服务端的函数

#include<sys/types.h>

#include<sys/socket.h>

int connect (int sockfd,struct sockaddr * serv_addr,int addrlen);

第一个参数为socket()返回的套接口描述符。

第二个参数为struct sockaddr类型的地址指针,表示要连接的地址和端口。

第三个参数为地址结构的长度。

 正常返回0,出错返回-1。

3、bind()

bind()函数为客户端使用的函数,用来对 socket()获得的套接口描述符绑定到本地的地址和端口上

#include <sys/socket.h>

int bind(int socketfd, const struct sockaddr *address, socklen_t address_len);

第一个参数为socket()返回的套接口描述符。

第二个参数为struct sockaddr类型的地址指针,表示要绑定在套接口上的本地地址和端口。

第三个参数为地址结构的长度。

 正常返回0,出错返回-1。

4、listen()

socket()建立的套接口为主动连接,服务端需要的是监听连接,故需要调用此函数将套接口转为被动连接。

#include <sys/types.h>

#include <sys/socket.h>

int isten(int sockfd, int backlog);

第一个参数为socket()返回的套接口描述符。

第二个参数为listen队列的长度,超过长度后的连接将出现连接D 错误WSAECONNREFUSED

 正常返回0,出错返回-1。

5、accept()

当服务端listen()接收到来自客户端用connect()发起的连接时,只会将连接放入请求队列中,而accept()函数会选择队列最前端的连接,创建一个新的套接口来与该请求进行通信。即accept()也会返回一个套接口,用来真正的与客户端进行通信。

#include <sys/types.h>

#include <sys/socket.h>

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

第一个参数为socket()返回的套接口描述符。

第二个参数为struct sockaddr类型的地址指针,用来记录客户端请求的地址和端口

第三个参数为地址结构的长度。

 正常返回一个套接口描述符,出错返回-1。

6、send()和recv()

 当连接建立后(客户端通过connect(),服务端通过accept()),通过send()和recv()来发送和接受数据。

#include <sys/types.h>

#include <sys/socket.h>

int send(int sockfd,const void* msg,int len,int flags);

int recv(int sockfd,void* buf,int len,unsigned int flags);

第一个参数为已连接的套接口。

第二个参数为要发送/接收的数据缓冲区。

第三个参数为要发送/接收数据长度。

第四个参数为调用方式(一般设置为0)。

7、close()

可以用来关闭接收连接的套接口

close(sockfd);

 

 

原创粉丝点击