socket网络编程接口常用函数

socket编程

1.socket函数

int SOCKET socket(int af,int type,int protocol)

af:位址资料族系 type:通讯方式 protocal:传输协定编号

返回值:-1表示建立socket发送变化,非负整数则表示成功,称为socket描述符

2.bind函数

int bind(SOCKET s,const struct sockaddr* name,int namelen)

s:指定好通讯协定的socket name:本地端位址 namelen:name长度

2.1 Sockaddr_in格式

struct socketaddr_in{

​ short sin_family;

​ u_short sin_port;

​ shruct in_addr sin_addr;

​ char sin_zero[8];

};

sin_family:位址资料族系,同样设定为AF_INET(ipv4)

sin_port:主机开放的通讯端口号,用htons()写入

sin_addr:主机IP地址,in_addr资料格式

sin_zero[8]:目前没有用,保留以后使用

2.2 in_addr格式

typedef struct in_addr{

​ union{

​ struct{u_char s_b1,s_b2,s_b3,s_b4;}S_un_b;

​ struct{u_short s_w1,s_w2;}S_un_w;

​ u_long S_addr;

}S_un;

}in_addr;

使用union的联合体,实际上大小是32bit的长整形,只要写入u_long S_addr这个变量,头文件中宏定义#define s_addr S_un.s_addr,写入IP时使用inet_addr(“IP位址字串”)转换成unsigned long类型

3. listen函数

listen是使socket进入等待连接状态,等待客户端连上线;

如果有client想要连过来,此时可以呼叫connect()来跟server连线,server接受后会建立新的socket和client通讯,listen socket则继续存在等待其他client,直到关闭为止

int listen(SOCKET s,int backlog);

s:设定好bind(),并且尚未连线的socket

backlog:等待server接受连线前,同时最大连接数

返回值:-1表错误,否则为0

4.accept函数

SOCKET accept(SOCKET s,struct sockaddr* addr,int* addrlen);

s:一个设定为listen状态的socket

addr:client 端位址咨询,由函数自动生成填入

addrlen:sddr长度,由函数自动产生

返回值:-1表示错误,否则传回另一个包含client端咨询的新socket descriptor,作为传送资料用

传进accept()的listen socket 本身并没有办法作资料的传输,所有必须透过accept()产生一个包含通讯协定、server\client咨询的新socket,利用他进行资料的传输

5.connect函数

int connect(SOCKET s,const struct sockaddr* name,int namelen);

返回值:-1表示错误,否则返回0

6.recv函数

int recv(SOCKET s,char* buf,int len,int flags);

s:一个建立连接成功的socket

buf:呼叫recv,用来储存收到的资料

len:buf的长度

flags:选择工作模式,一般为0

返回值:-1表示错误,否则回传接收到资料的长度

7.closesocket(),shutdown()函数 中断连接

在accept()或connect()成功后建立的通讯用socket,必须用closesocket()或shutdown()来结束连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值