网络编程有两种:
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编程