UNP学习:基本套接字编程
2016-04-13 22:48
351 查看
概述
1.服务器流程socket():创建指定类型的套接字
bind():填充套接字,就是把一个本地协议地址赋予一个套接字。
listen():把创建好的套接字变为监听套接字
accept():通过监听套接字,返回一个已连接套接字
read(), write(),
close():关闭套接字
2.客户端流程
socket()
bind() //可选,
connect():通过自己创建的套接字连接到指定服务器
read(), write()
close():关闭套接字
相关API
socket
#include <sys/socket.h> int socket(int family, int type, int protocol); //成功返回套接字描述符,出错返回-1
family:指明协议族
type:指明套接字类型
protocol:3种(IPPROTO_TCP, IPPROTO_UDP, IPPROTO_SCTP)或0
connect
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
servaddr:通用套接字结构,里面存放了要连接到服务器的信息。
addrlen:真实套接字结构的大小。
bind
int bind(int sockfd, const sockaddr *myaddr, socklen_t addrlen);
作用:把本地协议地址赋予一个套接字,即把一个协议的地址与套接字关联起来。
myaddr:指向特定于协议的地址结构的指针
addrlen:是myaddr所指向的地址结构的结构体的大小
listen
int listen(int sockfd, int backlog); //成功发回0,出错返回-1
作用:把一个未连接的套接字变成一个被动套接字。即将套接字变为一个监听套接字,这样就可以在accept中使用。
backlog:未完成listen转换的队列与已完成listen转换的队列的和不可以超过backlog.
内核为每个监听套接字维护两个队列
1)未完成连接队列,每个这样的SYN分节对应其中一项:已由某个客户发出并到达服务器,而服务器正在等待完成对应的TCP三次握手。对应于SYN_RCVD状态。
2)已完成连接队列,已经完成TCP三次握手的客户,处于ESTABLILSHED状态。
accept
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); //成功返回已连接套接字,出错返回-1
sockfd:监听套接字
cliaddr:由accept填充,用来返回已连接的客户的协议地址
addrlen:所使用的套接字结构的结构体的大小
getsockname
int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen); //成功返回0,出错返回-1
作用:返回某个套接字关联的本地协议地址。即填充localaddr所指向的套接字地址结构体,该套接字地址结构体的大小为addrlen。
sockfd:套接字
localaddr:套接字所关联的套接字结构体
addrlen:套接字地址结构体的大小
相关文章推荐
- 用C语言画一个“爱心”
- C语言基础知识<6>
- ruby中Class的allocate
- python集合(set)
- STL与泛型编程-练习2-GeekBand
- 用c++实现的简单的日期类
- ruby安装笔记
- Java进阶05 多线程
- Python dict del
- 对JAVA集合进行遍历删除时务必要用迭代器
- bzoj 3396 [Usaco2009 Jan]Total flow 水流
- 初识C++之多态
- java 路径读取学习
- 9.Python笔记之面向对象高级部分
- c++第2次作业
- Java进阶04 RTTI
- eclipse新建文件模板默认charset=ISO-8859-1解决
- 第六周-总结&结对编程
- Dedecms recommend.php SQL注入漏洞
- 【C++】迭代器的失效