2015.3.24—Socket编程

3-24 1,223PVs

1.创建、关闭socket(…)、closesocket(…)

2.绑定接口bind(…)
3.连接处理connect(…)、listen(…)、accept(…)
4.发送数据send(…), sendto(…),sendmsg(…),write(…)
5.接收数据recv(…), recvfrom(…), recvmsg(…), read(…)
6.通信管理select(…)
7.辅助API
getsockname(…), getsockbyname(…)
getsockopt(…), setsockopt(…)
gethostname(…), sethostname(…)
8.字节顺序
htons(…), ntohs(…), htonl(…), ntohl(…)
9.IP地址处理
net_addr(…), inet_ntoa(…)
inet_netof(…), inet_lnaof(…)
12.创建socket
参数:pf:协议簇,符号PF_INET表示TCP/IP
type:协议类型,数据报(无连接)、流式(面向连接)
流式:SOCK_STREAM
数据报:SOCK_DGRAM
protocal:实际协议 IPPROTO_TCP IPPROTO_UDP
例:创建使用UDP的socket
SOCKET sk;
sk= socket(PFINET,SOCK_DGRAM,IPPROTO_UDP);
13.关闭创建的SOCKET
error_code=closesocket(sk);
14.绑定接口bind()
erc= bind(sk,localaddr,addrlen);
struct sockaddr_in{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
 
例:
SOCKET sk;

sockaddr_in myAddr;

sk= socket(PF_INET, SOCK_DGRAM,IPPROTO_UDP);

myAddr.sin_family = PF_INET;

myAddr.sin_port = 0;

myAddr.sin_addr = 0;

bind(sk, &myAddr, sizeof(sockaddr_in));
当本地可使用任意端口时,端口号置0即可

当对本地任意网络接口有效时,IP地址置0即可

15.请求建立连接Connect()
erc = connect(sk,dstAddr,addrlen)
若连接成功,erc为0,否则表示连接出错
16.发送数据sendto()
erc= sendto(sk,datalen,flag, dstAddr,addrlen)
函数用UDP报文把data送到指定IP的主机的指定端口上
data为发送数据缓冲区,datalen规定发送长度
flag指定特殊需求,一般为0
dstAddr为sockaddr_in结构指针,指定接收方的IP地址和 端口,addrlen为地址长度
17.发送数据send()
erc = send(sk,data,datalen,flag)
带调用使用TCP报文吧data送到指定IP的主机的指定端口上
使用的sk应该是实现已建立了TCP连接的
18.接受数据recvfrom()
Byte_recvd=recvfrom(sk,buff,length,flag,srcAddr,addrLen)
该调用从socket接收从网上收到的UDP报文
收到的数据放在buff中,对方的地址放在srcAddr中buff和length指明接收缓冲区的位置和大小
如果缓冲区小于UDP报文长度,剩余的数据将消失
srcAddr 将由UDP协议填入发送方的IP地址和端口
返回值指出实际接收的字节数
该函数会一直阻塞软件运行,直到收到报文后,才恢复运行
19.接受数据recv()
Byte_Recvd=recv(sk,buff,length,flag)
该调用从TCP的连接的数据流中接收数据
buff指出存放数据的缓冲区,length指定了希望接收的数据长度
如果数据流中的数据长度大于length的长度,TCP只往缓冲区中送length个字节,后续数据不会丢
失,下次调用接收函数时,就会收到,
流中的数据长度小于length时,返回值指出实际接收的字节数
该函数会一直阻塞软件运行,直到收到报文后,才恢复运行
20.查询socket
n = select(ssks,rsks,esks,tmo)
n:返回可用socket数目
ssks:【IN】要查询的一组发送socket

【OUT】可发送的sockets

rsks:【IN】要查询的一组接收sockets

【OUT】有数据达到的sockets

esks:【IN】要查询的一组sockets

【OUT】出错的sockets

tmo:定时值,非0为等待时间;0 表示永远等待,直到至少有一个sockets有情况出现

2016.1.6—关于如何搭建VPN (I’m more powerful than before :P )

近几日,自己动手搭建了一个VPN,可以用于实现翻墙,免费使用IPv6网络等功能于一身。搭建过程用了一天左右。环境基于阿里云ECS。由于阿里云ECS,不支持IPv6,...

阅读全文

2016.1.6—Hello world, I’m back!与标识网络的域间TE路由优化

时隔两个月左右。我又回来啦!博客搬家,因此邮件提醒等设置基本上都没了,于是今天花了一晚上又重新做了一下。优化了一下评论框里的表情。 下面的笔记是之前...

阅读全文

2015.9.16—omnet++学习体会

NED语言描述网络结构。很简单,语法直白。和C语言一样的注释,大小写敏感。@display()的参数叫做显示字符串,它定义了模块在图形环境下的渲染效果;”i=...

阅读全文

欢迎留言

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据