socket编程常用函数

感谢原作者分享 http://blog.csdn.net/leumber/article/details/64129607

1.socket
int 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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值