net.Dial能够使用特定协议建立连接,如果成功建立,则返回一个Conn接口
func Dial(network, address string) (Conn, error) {
var d Dialer
return d.Dial(network, address)
}
建立TCP连接
conn, err := net.Dial("tcp", "ip:port")
建立UDP连接
conn, err := net.Dial("udp", "ip:port")
建立其它连接
conn, err := net.Dial(network, "0.0.0.0:9999")
其中network可以是以下协议
net.Listen能够监听本地端口,接收特定协议建立的连接,如果成功接收,则返回一个Listener接口
func Listen(network, address string) (Listener, error) {
var lc ListenConfig
return lc.Listen(context.Background(), network, address)
}
监听TCP连接
listen, err := net.Listen("tcp", "127.0.0.1:port")
监听UDP连接
listen, err := net.Listen("udp", "127.0.0.1:port")
监听其它连接
listen, err := net.Listen(network, "127.0.0.1:port")
其中network可以是以下协议
Listener是一个网络监听接口,不同的协程可以调用同一个Listener上的方法
type Listener interface {
Accept() (Conn, error)
Close() error
Addr() Addr
}
Conn是一个网络连接接口,不同的协程可以调用同一个Conn上的方法
type Conn interface {
Read(b []byte) (n int, err error)
Write(b []byte) (n int, err error)
Close() error
LocalAddr() Addr
RemoteAddr() Addr
SetDeadline(t time.Time) error
SetReadDeadline(t time.Time) error
SetWriteDeadline(t time.Time) error
}
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
// 建立conn连接
conn, err := net.Dial("tcp", "127.0.0.1:8888")
// 错误处理
if err != nil {
fmt.Println(err)
return
}
// 程序执行完后关闭连接
defer conn.Close()
// 能够从键盘获取输入的接口
inputReader := bufio.NewReader(os.Stdin)
// 循环监听conn
for {
// 读取键盘输入
readString, _ := inputReader.ReadString('\n')
// 去除读取到的换行
trim := strings.Trim(readString, "\r\n")
// 发送信息
_, err := conn.Write([]byte(trim))
// 错误处理
if err != nil {
fmt.Println(err)
return
}
// 读取返回信息
buf := [512]byte{}
n, err := conn.Read(buf[:])
// 错误处理
if err != nil {
fmt.Println(err)
return
}
// 输出返回信息
fmt.Println(string(buf[:n]))
}
}
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
// 监听端口
listen, err := net.Listen("tcp", "127.0.0.1:8888")
// 错误处理
if err != nil {
fmt.Println(err)
return
}
// 循环监听listen
for {
// 建立conn连接
conn, err := listen.Accept()
// 错误处理
if err != nil {
fmt.Println(err)
return
}
// 程序执行完后关闭连接
defer conn.Close()
// 循环监听conn
for {
// 能够从conn获取输入的接口
reader := bufio.NewReader(conn)
// 从conn中读取输入
var buf [1024]byte
read, err := reader.Read(buf[:])
// 错误处理
if err != nil {
fmt.Println(err)
return
}
// 保存从conn中读取的信息
recv := string(buf[:read])
// 输出recv
fmt.Println("GET MESSAGE: ", recv)
// 向客户端返回信息
conn.Write([]byte(recv))
}
}
}