套接字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的主要内容,如果未能解决你的问题,请参考以下文章

网络编程(part11)--socket模块方法及socket套接字属性

102 基于UDP协议的socket套接字

socket 套接字通信

socket(套接字)

简述Socket(套接字)通信

socket套接字的学习与简单应用