UNP学习:基本套接字编程
来源:互联网 发布:网络是把双刃剑 编辑:程序博客网 时间:2024/04/19 19:21
概述
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:套接字地址结构体的大小
- UNP学习:基本套接字编程
- UNP卷一学习笔记:基本UDP套接字编程
- apue和unp的学习之旅10——基本udp套接字编程
- UNP学习笔记(第四章 基本TCP套接字编程)
- UNP学习笔记(第八章 基本UDP套接字编程)
- UNP函数笔记二: 基本TCP套接字编程
- UNP函数笔记六: 基本UDP套接字编程
- UNP函数笔记七: 基本SCTP套接字编程
- UNP总结 Chapter 4 基本TCP套接字编程
- UNP总结 Chapter 8 基本UDP套接字编程
- UNP笔记(2)——基本套接字编程
- UNP总结 Chapter 4 基本TCP套接字编程
- UNP——Chapter 4:基本TCP套接字编程
- UNP卷一学习笔记:基本TCP套接字
- UNP卷1:第八章(基本UNP套接字编程)
- UNP学习笔记(第三章:套接字编程简介)
- UNP卷1:第四章(基本TCP套接字编程)
- UNP学习:套接字地址结构
- 获取手机通讯录联系人
- 数据结构学习笔记(七)--图
- poj-2105-IP Address
- Velt中的连接管理器
- 二叉树面试总结
- UNP学习:基本套接字编程
- 慢慢解读web.xml
- CSUST 第九届校赛J-炮兵阵地(第二类斯特林数)
- Python网络编程记录一
- C++Q&A(二) 变长数组和变长结构体是什么
- 某些库函数的模拟实现(一)
- Python 中enumerate的使用
- C#多线程——线程池和回调函数
- 刚挣钱的程序员同学该如何花钱?