socket与tcp连接

tcp服务器:
Go会为每一个客户端产生一个协程用来处理请求
Server端代码:
func main(){
fmt.Println("Starting the server ...")
listener,_ := net.Listen("tcp","localhost:50000")//使用tcp协议监听50000端口
for {
conn,_ := listener.Accept()//Server对应于对应于Client的一个conn,一个Clilent只会有一个Conn
go doServerStuff(conn)
}
}
func doServerStuff(conn net.Conn){
for{
buf := make([]byte, 512)
len,_ := conn.Read(buf)
if len >0{
fmt.Println(string(buf[:len]),len)
}
}
}

Client端代码:
func main(){
conn,_ :=net.Dial("tcp","localhost:50000")//使用tco协议连接目标ip的端口,返回一个Conn连接
reader := bufio.NewReader(os.Stdin)
fmt.Println("First,What is you name?")
clientName,_ := reader.ReadString(' ')
trimmedClient := strings.Trim(clientName," ")//除去 ,Linux下是
conn.Write([]byte(trimmedClient))//向连接中写入数据一段数据发送服务器
conn.Close()
}
每一次调用Write方法都会将写入连接的数据立刻发送到服务器,可以把连接看作服务器。
而在服务器中的Conn也是,每次读的数据都是客户端发来的数据堆积在一起。通常通过bufio,readString(' ')读取。

socket:TCP连接在C/S两端各自的那个Conn(连接)就是socket。
socket是网络传输中在C/S两端各拥有一个的表示TCP连接的对象。
或者说是一个接口,用于操作C/S两端数据发送和读取的一个接口。

所以说socket就是那个conn对象。
对于C/S架构的两端来说,两端的conn相同,具有同样的功能,一模一样两端可以使用相同的方法。
比如说在Client端也可以这样:
conn,_ := new.Dial("tcp","localhost:8080")
reader :=bufio.NewReader(conn)
reader.ReadString(' ')
所以两端没有主次之分,大家都是电脑、都是应用程序。
不过有客户端和服务端之分。

原文地址:https://www.cnblogs.com/mcmx/p/11390903.html