前言
文章插图
本文主要介绍的是C语言网络编程基础 , 介绍一些网络常识 , 这希望对于广大读者学习C/C++有一些帮助 。更多浅显的C语言、C++ , windows知识 , 持续关注我吧!
什么是socket?Socket的英文原义是“孔”或“插座” 。在编程中 , Socket被称做 套接字 , 是网络通信中的一种约定 。Socket编程的应用无处不在 , 我们平时用的QQ、微信、浏览器等程序 , 都与Socket编程有关 。我们平时使用浏览器查资料 , 这个过程的技术原理是怎样的呢?
文章插图
我们平时使用浏览器 , 大致就是这样的一个过程 。这里有两个重要的名词: 服务端与 客户端 。
Socket编程的目的就是如何实现这两端之间的通信 。
Socket编程在编程开发中很重要Socket编程不仅仅在互联网方面很重要 , 在我们的嵌入式方面也是非常的重要 , 因为现在很多电子设备都趋向于联网 。比如很多编程行业的招聘要求都会有这一条要求:
文章插图
说一点题外话 , 还在学校的朋友 , 如果感觉到很迷茫 , 不知道学什么的时候 , 可以上招聘网站上看看自己未来工作相关的职位的任职要求 , 这样就可以总结自己的一些不足、比较有针对性的去学习 。
Socket编程中的几个重要概念Socket编程用于解决我们 客户端与 服务端之间通信的问题 。我们平时多多少少都有听过IP地址、端口、TCP协议、UDP协议等概念 , 这些都与Socket编程中相关 , 想要知道怎么用起来 , 当然得先了解它们的一些介绍 。下面看一下这些专业术语的一些要点介绍:
1、什么是IP地址?
IP地址(InternetProtocolAddress)是指互联网协议地址 , 又译为 网际协议地址 。IP地址被用来给Internet上的电脑一个编号 。我们可以把“个人电脑”比作“一台电话” , 那么“IP地址”就相当于“电话号码” 。若计算机1知道计算机2的IP地址 , 则计算机1就能访问计算机2 。
IP地址是一个32位的二进制数 , 通常被分割为4个“8位二进制数”(也就是4个字节) 。IP地址通常用 点分十进制表示成(a.b.c.d)的形式 , 其中 , a,b,c,d都是0~255之间的十进制整数 。例:点分十进IP地址(100.4.5.6) , 实际上是32位二进制数(01100100.00000100.00000101.00000110) 。
IP地址有 IPv4与 IPv6之分 , 现在用得较多的是IPv4 。其中 , 有一个特殊的IP地址需要我们记住: 127.0.0.1 , 这是回送地址 , 即本地机 , 一般用来测试使用 。后边我们的实例中会用到 。
关于IP地址还有很多知识要点 , 但是对于在Socket编程中的应用 , 我们暂且知道这么多就可以 。
2、什么是TCP/IP端口?
上一点中我们提到 , 若计算机1知道计算机2的IP地址 , 则计算机1就能访问计算机2 。但是 , 我们要访问计算机2中的不同的应用软件 , 则还得需要一个信息: 端口 。端口使用16bit进行编号 , 即其范围为: 0~65536 。但 0~1023 的端口一般由系统分配给特定的服务程序 , 例如 Web 服务的端口号为 80 , FTP 服务的端口号为 21等 。
3、什么是协议?
协议(Protocol)是通信双方进行数据交互的一种约定 。如TCP、UDP协议:
TCP协议
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议 , 数据可以准确发送 , 数据丢失会重发 。TCP协议常用于web应用中 。
TCP连接(三次握手)TCP传输起始时 , 客户端、服务端要完成三次数据交互工作才能建立连接 , 常称为三次握手 。可形象比喻为如下对话:
具体示意图为:
文章插图
这里的SYN和ACK是都是标志位 , 其中SYN代表新建一个连接 , ACK代表确认 。其中m、n都是随机数 。具体说明如: