网络编程有两种:
1) TCP socket 编程,是网络编程的主流。之所以叫 Tcp socket 编程,是因为底层是基于 Tcp/ip 协议的。比如: QQ 聊天
2) b/s 结构的 http 编程,我们使用浏览器去访问服务器时,使用的就是 http 协议,而 http 底层依旧是用 tcp socket 实现的。

TCP/IP (Transmission Control Protocol/Internet Protocol) 的简写,中文译名为传输控制协议 / 因特网互联协议,又叫网络通讯协议,这个协议是 Internet 最基本的协议、Internet 国际互联网络的基础,简单地说,就是由网络层的 IP 协议和传输层的 TCP 协议组成的。
客户端向服务端发送消息

package main
​
import (
   "net"
   "fmt"
)
​
func main() {
   //创建TCPAddress变量,指定协议tcp4,监听本机8899端口
   addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899")
​
   //监听TCPAddress设定的地址
   lis, _ := net.ListenTCP("tcp4", addr)
​
   fmt.Println("服务器已启动")
​
   //阻塞式等待客户端消息,返回连接对象,用于接收客户端消息或向客户端发送消息
   conn, _ := lis.Accept()
​
   //把数据读取到切片中
   b := make([]byte, 256)
   fmt.Println("read之前")
   //客户端没有发送数据且客户端对象没有关闭,Read()将会阻塞,一旦接收到数据就不阻塞
   count, _ := conn.Read(b)
   fmt.Println("接收到的数据:", string(b[:count]))
   //关闭连接
   conn.Close()
   fmt.Println("服务器结束")
  }
客户端代码
package main
​
import (
   "net"
   "fmt"
)
​
func main() {
   //服务器端ip和端口
   addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899")
   //申请连接客户端
//第二个参数:本地地址  第三个参数:远程地址
   conn, _ := net.DialTCP("tcp4", nil, addr)
   //向服务端发送数据
   count, _ := conn.Write([]byte("客户端传递的数据"))
   fmt.Println("客户端向服务端发送的数据量为:", count)
   //通过休眠测试客户端对象不关闭,服务器是否能接收到对象
   //time.Sleep(10 * time.Second)
   关闭连接
   conn.Close()
   //fmt.Println("客户端结束")
​
}

 

go tcp编程
标签: