File tree Expand file tree Collapse file tree 1 file changed +4
-2
lines changed Expand file tree Collapse file tree 1 file changed +4
-2
lines changed Original file line number Diff line number Diff line change 5
5
Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
6
6
7
7
常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
8
+
8
9
## Socket如何通信
9
10
网络中的进程之间如何通过Socket通信呢?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中需要互相通信的进程,就可以利用这个标志在他们之间进行交互。请看下面这个TCP/IP协议结构图
10
11
@@ -71,8 +72,8 @@ func main() {
71
72
72
73
``` Go
73
74
74
- func (c *TCPConn ) Write (b []byte ) (n int , err os . Error )
75
- func (c *TCPConn) Read(b []byte) (n int, err os.Error )
75
+ func (c *TCPConn ) Write (b []byte ) (int , error )
76
+ func (c *TCPConn) Read(b []byte) (int, error )
76
77
```
77
78
78
79
`TCPConn`可以用在客户端和服务器端来读写数据。
@@ -84,6 +85,7 @@ func (c *TCPConn) Read(b []byte) (n int, err os.Error)
84
85
type TCPAddr struct {
85
86
IP IP
86
87
Port int
88
+ Zone string // IPv6 scoped addressing zone
87
89
}
88
90
```
89
91
在Go语言中通过` ResolveTCPAddr ` 获取一个` TCPAddr `
You can’t perform that action at this time.
0 commit comments