套接字socket
Posted yxbl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了套接字socket相关的知识,希望对你有一定的参考价值。
基本概念
套接字(Socket)是一种介于应用层与传输层之间的抽象层,使用Socket可以将应用程序添加到网络中,并可以与处于同一个网络中的其他应用程序进行数据通信。
sockect一定要有IP地址跟端口号:
IP地址:在网络环境中唯一标识一台主机
端口号:在主机中唯一标识一个进程
IP地址+端口号:在网络环境中唯一标识一个进程()
套接字一定是成对出现:
一个socket含有两个缓冲区,一个用于读入,一个用于写出,实现全双工。
Socket类型
我们现在主要使用的是TCP/IP协议族,而TCP/IP协议族中的主要Socket类型为流套接字和数据报套接字。
流套接字:
使用协议:使用TCP作为端对端的通信协议
特点:
(1)面向连接;
(2)每一条TCP连接只能是点对点的(一对一);
(3)提供可靠交付的服务;
(4)提供全双工通信;
(5)面向字节流。
流套接字,就好像打电话,必须两端同时接通才能通话。
数据报套接字:
使用协议:使用UDP作为端对端的通信协议
特点:
(1)无连接;
(2)尽最大努力交付;
(3)面向报文;
(4)无拥塞控制;
(5)支持一对一、一对多、多对一和多对多的交互通信;
(6)首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。
数据报套接字,就好像寄信,我往外寄出去了,但是对方收没收到我不知道。
Socket工作流程
tcp
udp
socket函数
头文件:
#include <sys/socket.h>
函数原型:
int socket(int domain, int type, int protocol);
作用:
创建套接字。
参数介绍:
参数domain:指定使用何种的地址类型。默认AF_INET。
eg:
AF_INET IPv4网络通信
AF_INET6 IPv6网络通信
AF_PACKET 链路层通信
AF_UNIX, AF_LOCAL 本地通信
参数type:套接字类型。默认SOCK_STREAM。
eg:
1、SOCK_STREAM 提供双向连续且可信赖的数据流, 即TCP. 支持 OOB 机制, 在所有数据传送前必须使用connect()来建立连线状态
2、SOCK_DGRAM 使用不连续不可信赖的数据包连接,基于UDP
3、SOCK_SEQPACKET 提供连续可信赖的数据包连接
4、SOCK_RAW 提供原始网络协议存取
5、SOCK_RDM 提供可信赖的数据包连接
6、SOCK_PACKET 提供和网络驱动程序直接通信. protocol 用来指定 socket 所使用的传输协议编号, 通常此参考不用管它, 设为0 即 可
参数protocol:协议号。可设置为0,表示选择当前family和type组合下 protocol的系统默认值
eg:
IPPROTO_TCP IPPTOTO_UDP IPPROTO_SCTP IPPROTO_TIPCTCP
TCP传输协议 UDP传输协议 STCP传输协议 TIPC传输协议
以上是关于套接字socket的主要内容,如果未能解决你的问题,请参考以下文章