![6be775afeee601e389d9f5d8e279cefd.png](https://i-blog.csdnimg.cn/blog_migrate/c8ab89acaf7c02380048f75e8d550449.png)
套接字 socket是操作系统内核的一个数据结构,它是网络中节点进行相互通信的门户。网络编程实际上也可以称作套接字编程。
套接字有3种类型:
- 流式套接字,即TCP套接字,用
SOCK_STREAM
表示 - 数据报套接字,即UDP套接字(或称无连接套接字),用
SOCK_DGRAM
表示 - 原始套接字,用
SOCK_RAM
表示
本文主要分析TCP套接字和UDP套接字。
套接字地址结构由网络地址和端口号组成,如下图:
![598edd5489988581c2162260d67827ee.png](https://i-blog.csdnimg.cn/blog_migrate/80ebdffebfc3f52f97e56ef06db61c96.png)
端口号概念
在网络技术中,端口大致有两种意思:一是物理意义上的端口,比如ADSL Modem、集线器、交换机、路由器等用于连接其它网络设备的接口,如RJ-45端口、SC端口等。二是逻辑意义上的端口,一般指TCP/IP协议中的端口,端口范围从0~65535,比如浏览器网页服务(HTTP协议)的80端口,用于FTP服务的21端口等。端口号只有本地意义,即端口号是为了标识本地计算机的各个进程。
端口号分为两类,一类是由因特网指派名字和号码公司ICANN负责分配给一些常用的应用程序固定使用的”周知的端口“,其数值一般为0~1024,如:
![400c6e432441ffedd7f0531a0fa6f39a.png](https://i-blog.csdnimg.cn/blog_migrate/f49d498f5bcc27d288bc7278b9b1f929.jpeg)
另一类则是一般端口号,用来随时分配给请求通信的客户线程。
TCP传输方式
TCP是一个面向连接的传输层协议,在数据发送之前(即进程通信之前),必须先建立连接。通信完毕后,必须关闭连接。基于TCP传输协议的服务器与客户机间的通信工作流程如下图:
![e6222ba2b7a0e08f4dcc5baf18eac546.png](https://i-blog.csdnimg.cn/blog_migrate/0b7e3f4aecf081db6943e19dca8eb623.jpeg)
大致流程如下:
- 服务器先用
socket()
函数来建立一个套接字,用这个套接字完成通信的监听及数据的收发。 - 服务器用
b