SocketAPI的一些常用函数

注意以下的接口函数都是linux下的

int  listen(SOCKET sockfd,int backlog);头文件:#include<sys/types.h>

使服务器端的流套接字处于监听状态,仅服务器端调用,仅用于面向连接的流套接字;

sockfd: 一个已绑定未被连接的套接字描述符

backlog:连接请求队列的最大长度

功能:listen函数使用主动连接套接字变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程,在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接

返回值:0:成功

SOCKET_ERROR:失败

int connect(int s,const struct sockaddr*name,int namelen,saddrlen);头文件#include<sys/socket.h>

s:标识一个未连接socket

name:指向要连接socket的sockaddr结构体的指针

namelen:sockaddr结构体的字节长度

成功返回0,失败赶回-1,错误原因在环境变量中

客户程序调用此函数来使客户套接字(sd)与特定计算机的特定端口(saddr)的套接字(服务)进行连接;

仅用于客户端(TCP,UDP),TCP:建立TCP连接,UDP:指定服务器断电地址

accept(sd,caddr,caddrlen)

服务程序调用此函数从处于监听状态的流套接字sd的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道

仅用于TCP套接字,仅用于服务器,利用新创建的套接字与客户端通信

int send(SOCKET s,const char FAR*buf, int len, int flags);用于已连接的套接字

s:用于标识已连接套接口的描述字

buf:包含待发送数据的缓冲区

len:缓冲区中数据的长度

flags:调用执行方式

功能:向一个已连接的socket发送数据,如无错误,返回值为所发送数据的总数,否则返回SOCKET——REEOR

sendto(sd,*buf,len,flags,destaddr,addrlen);//未连接

ssize_t read(int fd,void*buf,size_t count)

成功返回读取的字节数,出错返回-1,并设置errno,如果在调read()之前已到达文件末尾,则这次read() 返回0

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

domain:一个地址描述,目前仅支持AF_INET格式,也就是说ARPA Internet 地址格式

type: 新套接口的类型描述

protocol:套接口所用协议,如果调用者不想指定,可用0指定,表示缺省

功能:该函数可根据指定的地址族,数据类型和协议来分配一个套接口的描述字及其所用的资源的函数


int recv(sd,*buffer,len,flags);

recvfrom(sd,*buf,len,flags,senderaddr,saddrlen);

recv函数从TCP连接的另一端接受数据,或者从调用了connect函数的UDP客户端套接字接受服务器发来的数据

recvfrom函数用于从UDP服务器端套接字与未调用connect函数的UDP客户端套接字接受对端数据

int bind(int sockfd,const struct sockadAFdr*my_addr,socklen_t addrlen)#include<sys/types.h>#include<sys/socket.h>将一本地地址与一套接口捆绑,本函数适用于未连接的数据报或流类套接口,在connect()或listen()调用前使用。当用socket()创建套接口后,它便存在于一个名字空间(地址族)中,但并未被赋予名字,bind()函数通过给一个未命名套接口分配一个本地名字来为 套接口建立本地捆绑

参数列表中:sockfd表示已经建立的socket编号,my_addr是一个指向sockaddr结构体类型的指针,参数addrlen表示my_addr结构的长度,可以用sizeof操作符获得

band成功发回0,失败返回-1

第二部分

sockaddr的结构:

struct sockaddr{

unsigned short sa_family;//*address family,AF_xxx

char sa_data[14];//14bytes of protocol address

};

sa_family:是2字节的地址家族,一般都是"AF_xxx"的形式,它的值包括三种:AF_INET,AF_INET6和AF——UNSPEC

sockaddr_in

struct sockaddr_in{

short int sin_family;//Address family

unsigned short int sin_port;//Port number

struct in_addr sin_addr;//Internet address

unsigned char sin_zero[8];//same size as struct sockaddr

};

in_addr结构

typedef uint32_t in_addr_t;

typedef struct in_addr

{

 in_addr_t s_addr;

};

 上述结构体是根据网络协议的地址格式而定义的





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值