##写在前面
最近一直在找更好的实习,发现网络编程是一个优秀的程序员必备的技能。而自己在学校中学到的东西很少(逃。要不是有之前的实习和做个一个小小的项目,对于很多知识可能还只是停留在书本上(其实就是没进脑)。最近有人问我是否了解socket,我顿时语塞。对与socket的认识还是学习java的时候知道可以使用socket进行客户端与服务器端的通信,可是当时并没有去实践。欠下的债都是要还的。
此外为什么我每篇博文的开头都写点自己的感受。我觉得博客不仅仅是记录自己的技术积累,也是抒发自己心情的一个途经,所以我会在每篇文章前面写一点点自己在写博文的时候的心情。
##正文
socket,套接字,是基于TCP/IP协议族下的一种网络通信方式。我们知道,在本地,进程之间有多种方法去通信。在网络中,我们同样可以使用socket进行通信。接下来一步步来看socket是如何使网络上的进程相互通信的。
我们知道,要像让进程通信,首先必须确认进程的身份。如同我们只有知道了和自己谈话的是谁,我们才知道谈什么。在本地,进程拥有唯一的标识PID。在网络上,基于TCP/IP协议,通过IP,协议,端口号,我们可以确认一个进程的唯一身份。
使用TCP/IP协议的应用程序通常采用应用编程接口,有本文讲到的socket(套接字)和TIL(被淘汰了)。目前而言,绝多大数的应用程序都是基于socket进行网络通信的,所以了解socket是一个程序员必备的。
##scocket 究竟是什么
socket起源于UNIX。我们知道UNIX的设计原理就是一切皆文件,操作都是open -> read/write -> close。所以说,我们可以认为socket也是一个文件,是基于上述设计原理的实现。socket函数就是专门来完成相应操作的。
##socket 操作
在上面我们知道了socket是一个文件,那么socket自然有对应的操作方法,下面是基于TCP的几个基本操作。
(注,本文的方法是使用Objective-C写的,其实socket在任何语言都是差不多的)
1 |
|
通过观察方法,我们发现socket其实就是确认目标 ->建立连接 -> 传送/读取 -> 断开 的过程
我们再来看看TCP和UDP下socket操作的不同的地方
####TCP
####UDP
##最后
到此,对于socket编程的概念有了个一个初步的认识了。在实际开发中,我们一般不会直接调用这些底层的API。借助于一些开源的第三方库更有利于项目的开发运行。不过,对于基本的理论知识还是必须要掌握的。