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:套接字地址结构体的大小

0 0
原创粉丝点击