socket 介绍
socket 是客户端和服务器连接的桥梁,socket 用于web浏览器和服务器的通信,socket是一种文件描述符。
socket 分为两种 流式socket
和 数据报式socket
1. 流式socket
是一种面向连接
的Socket,针对于面向连接的TCP服务应用
2. 数据报式socket
是一种无连接
的socket,对应于无连接的UDP服务应用
socket通信
socket 的通信依赖于三个部分IP
,端口
,协议
, 这三部分可以标志一个进程
网络层的“ip地址”可以唯一标识网络中的主机,
而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。
这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中需要互相通信的进程,就可以利用这个标志在他们之间进行交互。
go 服务端的简单实现
package main
import (
"net"
"os"
"fmt"
"time"
)
func main() {
service :=":7077"
// 获得tcpAdd ,其中包括ip 和端口
/*
type TCPAddr struct {
IP IP
Port int
}*/
tcpAddr,err := net.ResolveTCPAddr("tcp4",service)
checkerror(err)
//监听端口号
listener,err:=net.ListenTCP("tcp",tcpAddr)
checkerror(err)
for {
//通过Accept接受连接
conn, err := listener.Accept()
if err != nil {
continue
}
//使用goroutine 处理一个连接,实现并发
go handleClient(conn)
}
}