简述基本TCP套接字编程(一)
2016-04-26 15:05
477 查看
最近在看UNP的基本TCP套接字编程这一章,现总结如下:
首先用一张图阐述一下基本TCP socket的C/S框架
![](http://www.bkjia.com/uploads/allimg/140819/1640544K3-1.png)
(1)socket函数
#include<sys/socket.h>
int socket(int family,int type,int protocol)
函数说明:
用于创建一个套接字
参数说明:
family制定协议族,该参数也被称作协议域。具体常值如下表:
type指明socket类型。具体如下表:
protocol设为下表的某个协议类型的常值,或者设为0
返回值:
socket函数成功时,返回一个被称为套接字描述符(socket descriptor)的小的非负整数,其也被简称为sockfd;失败返回-1
(2)connect函数
#include<sys/socket.h>
int connect(int sockfd,struct sockaddr *servaddr,socklen_t addrlen)函数说明:
用于与TCP服务器建立连接,调用connect函数将激发三次握手。connect函数导致当前套接字从CLOSED状态转移到SYN_SENT状态,若成功再转移到ESTABLISHED状态。若connect失败必须close当前套接字并重新调用socket
参数说明:
sockfd是socket函数返回的套接字描述符
servaddr是一个指向套接字地址结构的指针
addrlen指定套接字地址结构的大小
返回值:
若成功为0,出错则为-1
(3)bind
9c1a
函数
#include<sys/socket.h>
int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen)函数说明:
bind函数将一个本地协议地址赋予一个套接字。对于网际网协议,协议地址是32位的IPv4地址或128位IPv6地址与16位TCP或UDP端口号的组合。
调用bind可以指定IP地址或端口号,可以根据下表设置sin_addr和sin_port或sin6_addr和sin6_port
对于IPv4来说,通配地址由常值INADDR_ANY指定,其值一般为0,它告知内核去选择IP地址,常写作:
struct sockaddr_in servaddr;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
参数说明:
sockfd是socket函数返回的套接字描述符
myaddr是一个指向套接字地址结构的指针
addrlen指定套接字地址结构的大小
返回值:
成功返回0,出错-1
首先用一张图阐述一下基本TCP socket的C/S框架
![](http://www.bkjia.com/uploads/allimg/140819/1640544K3-1.png)
(1)socket函数
#include<sys/socket.h>
int socket(int family,int type,int protocol)
函数说明:
用于创建一个套接字
参数说明:
family制定协议族,该参数也被称作协议域。具体常值如下表:
family | 说明 |
AF_INET | IPv4协议 |
AF_INET6 | IPv6协议 |
AF_LOCAL | Unix域协议 |
AF_ROUTE | 路由套接字 |
AF_KEY | 密钥套接字 |
type | 说明 |
SOCK_STREAM | 字节流套接字 |
SOCK_DGRAM | 数据报套接字 |
SOCK_SEQPACKET | 有序分组套接字 |
SOCK_RAW | 原始套接字 |
protocol | 说明 |
IPPROTO_TCP | TCP传输协议 |
IPPROTO_UDP | UDP传输协议 |
IPPROTO_SCTP | SCTP传输协议 |
socket函数成功时,返回一个被称为套接字描述符(socket descriptor)的小的非负整数,其也被简称为sockfd;失败返回-1
(2)connect函数
#include<sys/socket.h>
int connect(int sockfd,struct sockaddr *servaddr,socklen_t addrlen)函数说明:
用于与TCP服务器建立连接,调用connect函数将激发三次握手。connect函数导致当前套接字从CLOSED状态转移到SYN_SENT状态,若成功再转移到ESTABLISHED状态。若connect失败必须close当前套接字并重新调用socket
参数说明:
sockfd是socket函数返回的套接字描述符
servaddr是一个指向套接字地址结构的指针
addrlen指定套接字地址结构的大小
返回值:
若成功为0,出错则为-1
(3)bind
9c1a
函数
#include<sys/socket.h>
int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen)函数说明:
bind函数将一个本地协议地址赋予一个套接字。对于网际网协议,协议地址是32位的IPv4地址或128位IPv6地址与16位TCP或UDP端口号的组合。
调用bind可以指定IP地址或端口号,可以根据下表设置sin_addr和sin_port或sin6_addr和sin6_port
IP地址 | 端口 | 结果 |
通配地址 | 0 | 内核选择IP地址和端口 |
通配地址 | 非0 | 内核选择IP地址,进程指定端口 |
本地IP地址 | 0 | 进程指定IP地址,内核选择端口 |
本地IP地址 | 非0 | 进程指定IP地址和端口 |
struct sockaddr_in servaddr;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
参数说明:
sockfd是socket函数返回的套接字描述符
myaddr是一个指向套接字地址结构的指针
addrlen指定套接字地址结构的大小
返回值:
成功返回0,出错-1
相关文章推荐
- OkHttp使用教程
- 关于BT网络的一些改进
- CORS Filter
- 10 个你需要了解的 Linux 网络和监控命令:
- 【Caffe实践】 添加自己的网络层
- Android http请求
- 四种主要网络IO虚拟化模型
- TCP的序列号与确认号实例
- ZigBee无线传感器网络远程数据采集系统设计
- HTTP: Status code
- 5种服务器网络编程模型讲解
- Nginx + Tomcat + HTTPS 配置原来不需要在 Tomcat 上启用 SSL 支持
- 使用FlaycoBanner实现图片轮播效果(加载网络图片)
- 网络流量监控
- tcp通信协议
- 深入理解HTTP Session
- Lighttpd中CGI执行流程
- 网络流模板
- TCP/IP 卷一 ----------IP:网际协议
- Linux Netcat 命令——网络工具中的瑞士军刀