Files
build-web-application-with-…/8.1.md
2012-10-07 23:27:33 +08:00

23 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#8.1 Socket编程
在很多底层开发者的眼里一切编程都是Socket话虽然有点夸张但是事实如此现在的网络编程几乎都是用的Socket。如我们每天打开浏览器浏览网页时浏览器的进程怎么和Web服务器进行通信的呢当你用QQ聊天时QQ进程怎么和服务器或者是你的好友所在的QQ进程进行通信的呢当你打开PPstream观看视频时PPstream进程如何视频服务器进行通信的呢这些都是靠Socket来进行通信的可见Soacket编程对于现在的编程来说是如何的重要接下来我们讲介绍Go语言中如何来进行Socket编程。
##什么是Socket
Socket起源于Unix而Unix/Linux基本哲学之一就是“一切皆文件”都可以用“打开open > 读写write/read > 关闭close”模式来操作。Socket就是该模式的一个实现网络的Socket数据传输是一种特殊的I/OSocket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket()该函数返回一个整型的Socket描述符随后的连接建立、数据传输等操作都是通过该Socket实现的。
常用的Socket类型有两种流式SocketSOCK_STREAM和数据报式SocketSOCK_DGRAM。流式是一种面向连接的Socket针对于面向连接的TCP服务应用数据报式Socket是一种无连接的Socket对应于无连接的UDP服务应用。
##Socket如何通信
网络中进程之间如何通过Socket通信呢首要解决的问题是如何唯一标识一个进程否则通信无从谈起在本地可以通过进程PID来唯一标识一个进程但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题网络层的“ip地址”可以唯一标识网络中的主机而传输层的“协议+端口”可以唯一标识主机中的应用程序进程。这样利用三元组ip地址协议端口就可以标识网络的进程了网络中的进程通信就可以利用这个标志与其它进程进行交互。请看下面这个TCP/IP协议结构图
![](images/8.1.socket.png?raw=true)
使用TCP/IP协议的应用程序通常采用应用编程接口UNIX BSD的套接字socket和UNIX System V的TLI已经被淘汰来实现网络进程之间的通信。就目前而言几乎所有的应用程序都是采用socket而现在又是网络时代网络中进程通信是无处不在这就是为什么说“一切皆Socket”。
##TCP Socket
##UDP Socket
## links
* [目录](<preface.md>)
* 上一节: [Web服务](<8.md>)
* 下一节: [webSockets](<8.2.md>)
## LastModified
* $Id$