Update code

This commit is contained in:
invzhi
2017-12-12 09:03:17 +08:00
parent abc3961a5b
commit 69ff82cb10

View File

@@ -5,6 +5,7 @@
Socket起源于Unix而Unix基本哲学之一就是“一切皆文件”都可以用“打开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协议结构图
@@ -71,8 +72,8 @@ func main() {
```Go
func (c *TCPConn) Write(b []byte) (n int, err os.Error)
func (c *TCPConn) Read(b []byte) (n int, err os.Error)
func (c *TCPConn) Write(b []byte) (int, error)
func (c *TCPConn) Read(b []byte) (int, error)
```
`TCPConn`可以用在客户端和服务器端来读写数据。
@@ -84,6 +85,7 @@ func (c *TCPConn) Read(b []byte) (n int, err os.Error)
type TCPAddr struct {
IP IP
Port int
Zone string // IPv6 scoped addressing zone
}
```
在Go语言中通过`ResolveTCPAddr`获取一个`TCPAddr`