您的位置:首页 > 编程语言

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:套接字地址结构体的大小
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: