感谢原作者分享 http://blog.csdn.net/leumber/article/details/64129607
1.socketint socket(int doamin,int type,int pro);
功能:通过该函数可以创建一个socket套接字文件,并返回该文件的描述符。
参数:domain
PF_INET 表示是个互联网程序
PF_UNIX 表示域内套接字,支持单机进程通信
注:这几个参数有AF_UNIX=AF_LOCAL, PF_UNIX=PF_LOCAL, AF_LOCAL=PF_LOCAL, AF_INET=PF_INET.
参数:type
SOCK_STREAM流式套接字
SOCK_DGRAM 数据报套接字
SOCK_RAW 原始套接字
pro 具体的应用层协议类型,如果该值不清楚,则用0 表示系统自动匹配
返回值:成功 返回一个文件描述符
失败 -1
2.bind
int bind(int sockfd,struct sockaddr * my_addr,int addrlen);
功能:通过该函数可以将本地的ip地址与之前的socket文件描述符关联起来。
参数:sockfd 之前已经创建的套接字id
struct sockaddr ip地址结构体
struct sockaddr
{
u_short sa_family; //地址族 ===》PF_INET/AF_INET
char sa_data[14]; //14字节的ip地址信息。协议地址信息。
};//通用地址结构
struct sockaddr_in
{
u_short sin_family; // 地址族 PF_INET/AF_INET
u_short sin_port; //端口 数字
struct in_addr sin_addr;// ip地址 整形数字
};
注意:端口和ip信息要处理后加载
struct sockaddr_un
{//域内套接字用
sa_family_t sun_family; /*PF_UNIX或AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* 路径名 */
};
struct in_addr
{
in_addr_t s_addr; /ip地址转换成整数后的值
}
addrlen:参数2的所占内存空间长度,一般用 sizeof(struct sockaddr_in);
返回值:成功 0
失败-1
3.listen
int listen(int sockfd,int backlog);
功能:该函数用于检测sockfd对应的设备文件上有多少个连接进来。
参数:sockfd 之前已经打开并bind的文件描述符
backlog 允许同时接入连接的个数。
返回值:成功 0
失败 -1
4.accept
int accept(int sockfd,struct sockaddr* addr,socklen_t * addrlen);
功能:该函数用于服务器端接收一个连接进来
参数: sockfd 文件描述符id
addr 连接方的ip地址信息。如果不关心对方的地址,则该值可以为NULL;
addrlen 参数2的内存区长度的地址值,一般用len = sizeof(struct sockaddr);&len
注意:该函数默认情况下是阻塞等待客户端的连接
返回值:成功 0 返回一个新的文件描述符,专门用于之后的通信过程
失败 -1
5.connect
int connect(int sockfd,struct sockaddr* seraddr,int addrlen);
功能:从客户端向服务器发起一次连接请求
参数:sockfd 之前通过socket()函数成功打开的文件描述符 = 它的返回值
seraddr 服务器端的ip地址+端口信息
addrlen 参数2的内存占用大小,一般是 sizeof(struct sockaddr)
返回值:成功 0
失败-1
6.send
ssize_t send(int sockfd,const void * buff,size_t len,int flags);
功能:用于TCP通信过程中的发送数据
参数:sodkfd 如果是服务器端则改值等于accept的返回值新建的fd
如果是客户端则该值等于原始的sockfd;
buff 要发送的数据内存区,一般用数组或者动态申请的内存
len 要发送的数据长度
flags 表示阻塞方式发送数据 0 不阻塞 1 阻塞
返回值:成功 实际发送的字节长度
失败 -1
7.recv
ssize_t recv(int sockfd,void * buff,size_t len ,int flags);
功能:用于TCP 通信过程中的接收数据
参数:sodkfd 如果是服务器端则改值等于accept的返回值新建的fd
buff 要接收的数据内存区,一般用数组或者动态申请的内存。
len 要接收的数据长度。一般是sizeof(buff)
flags 表示阻塞方式接收数据
返回值:成功 接收到的字节数
失败 -1
8.close
int close(int fd);
功能:关闭指定的文件描述符即可,如果是服务器端关闭新fd和原始fd
返回值:成功 0
失败 -1
在使用读写函数时需要注意
send 、 recv 用于TCP 通信
sendto 、recvfrom 用于UDP通信
write 、read 可用于TCP UDP 通信
在使用本地socket时只能使用read和write
9.ulink()函数
int unlink(const char* pathname);
功能:unlink从文件系统中删除一个名字,若这个名字是指向这个文件的最后一个链接,并且没有进程处于打开这个文件的状态,则删除这个文件,释放这个文件占用的空间。
如果这个名字是指向这个文件的最后一个链接,但有某个进程处于打开这个文件的状态,则暂时不删除这个文件,要等到打开这个文件的进程关闭这个文件的文件描述符后才删除这个文件。
如果这个名字指向一个符号链接,则删除这个符号链接。
如果这个名字指向一个socket、fifo或者一个设备,则这个socket、fifo、设备的名字被删除,当时打开这些socke、fifo、设备的进程仍然可以使用它们。
返回值:成功0
失败-1