demo:
package main
import (
"fmt"
"net"
)
func main() {
fmt.Println("server is listening")
listener, err := net.Listen("tcp", "0.0.0.0:8888")
//本地监听8888端口
if err != nil {
fmt.Println("server failed to listening:", err)
return
}
defer listener.Close() //延时关闭
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("server failed to accept:", err)
} else {
fmt.Printf("conn = %v\n", conn)
}
//这里启动协程为客户端服务
}
//fmt.Printf("listener = %v\n", listener)
}
/*
cmd下 telnet 127.0.0.1 8888去连接server
server is listening
conn = &{{0xc000074c80}}
*/
服务器程序:
package main
import (
"fmt"
"net"
)
func process(conn net.Conn) {
//循环接受客户端发送的信息
defer conn.Close()
for {
//创建一个切片
fmt.Println("server is waiting for ", conn.RemoteAddr().String())
buf := make([]byte, 1024)
r, err := conn.Read(buf) //等待client发送信息,如果client没有write 则阻塞
if err!=nil{
fmt.Println("client is close", conn.RemoteAddr().String())
return//client已经关闭了
}
//显示读取的内容
fmt.Printf(string(buf[:r]))
}
}
func main() {
fmt.Println("server is listening")
listener, err := net.Listen("tcp", "0.0.0.0:8888")
//本地监听8888端口
if err != nil {
fmt.Println("server failed to listening:", err)
return
}
defer listener.Close() //延时关闭
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("server failed to accept:", err)
} else {
fmt.Printf("conn = %v and ip = %v\n", conn, conn.RemoteAddr().String())
}
//这里启动协程为客户端服务
go process(conn)
}
//fmt.Printf("listener = %v\n", listener)
}
/*
server is listening
conn = &{{0xc000074c80}} and ip = 192.168.153.1:60432
你好服务器
*/
客户端程序
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
//连接服务器
conn, err := net.Dial("tcp", "192.168.153.1:8888")
if err != nil {
fmt.Println("client failed to connect:", err)
return
}
fmt.Println("connect successful=", conn)
//从终端读取一行数据
r, _ := bufio.NewReader(os.Stdin).ReadString('\n')
//将读取内容发送给服务器
n, _ := conn.Write([]byte(r))
fmt.Println("the bytes of send is", n)
}
/*
connect successful= &{{0xc000074a00}}
你好服务器
the bytes of send is 17
*/
循环信息发送 客户端发exit 客户端关闭
1.客户端
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
//连接服务器
conn, err := net.Dial("tcp", "192.168.153.1:8888")
if err != nil {
fmt.Println("client failed to connect:", err)
return
}
fmt.Println("connect successful=", conn)
for {
//从终端读取一行数据
r, _ := bufio.NewReader(os.Stdin).ReadString('\n')
r = strings.Trim(r, " \r\n")//去掉换行符
if r == "exit" {
break
}
//将读取内容发送给服务器
n, _ := conn.Write([]byte(r + "\n"))
fmt.Println("the bytes of send is", n)
}
}
2.服务器
package main
import (
"fmt"
"net"
)
func process(conn net.Conn) {
//循环接受客户端发送的信息
defer conn.Close()
for {
//创建一个切片
//fmt.Println("server is waiting for ", conn.RemoteAddr().String())
buf := make([]byte, 1024)
r, err := conn.Read(buf) //等待client发送信息,如果client没有write 则阻塞
//显示读取的内容
if err != nil {
fmt.Println("client is closed:", conn.RemoteAddr().String())
return
}
fmt.Printf(string(buf[:r]))
}
}
func main() {
fmt.Println("server is listening")
listener, err := net.Listen("tcp", "0.0.0.0:8888")
//本地监听8888端口
if err != nil {
fmt.Println("server failed to listening:", err)
return
}
defer listener.Close() //延时关闭
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("server failed to accept:", err)
} else {
fmt.Printf("conn = %v and ip = %v\n", conn, conn.RemoteAddr().String())
}
//这里启动协程为客户端服务
go process(conn)
}
//fmt.Printf("listener = %v\n", listener)
}