1、在计算机(尤其是做服务器)要尽可能的少开端口
2、-一个端口只能被一个程序监听
3、如果使用netstat -an可以查看本机有哪些端口在监听
4、可以使用netstat -anb来查看监听端口的pid,在结合任务管理器关闭不安全的端口.
四、练习 1、serverpackage main
import (
"fmt"
"net"
)
//防止网络阻塞,采用协程
func process(conn net.Conn) {
//这里一定要关闭,不然连接过多
defer conn.Close()
for{
//创建一个切片
buf := make([]byte, 1024)
//客户端通过conn发送消息
//没有消息发送过来就在这里阻塞
n, err := conn.Read(buf)
if err != nil {
fmt.Println("客户端退出:")
return
}
fmt.Print(string(buf[:n]))
}
}
func main() {
fmt.Println("服务器开始监听")
//tcp网络协议
//0.0.0.0:8888,表示本机8888端口
listen, err := net.Listen("tcp", "0.0.0.0:8888")
if err != nil {
fmt.Println("listen err:",err)
return
}
//延时关闭
defer listen.Close()
//循环等待客户连接
for {
fmt.Println("等待客户端连接")
conn, err := listen.Accept()
if err != nil{
fmt.Println("Accept err:",err)
} else {
fmt.Println("Accept success",conn.RemoteAddr())
}
//调用协程
go process(conn)
}
}
2、client
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
conn, err := net.Dial("tcp", "192.168.250.49:8888")
if err != nil{
fmt.Println("client err:",err)
return
}
reader := bufio.NewReader(os.Stdin)
//从终端读取用户输入的数据
for{
line, err := reader.ReadString('\n')
if err != nil{
fmt.Println("reader err:",err)
return
}
//判断如果用户输入exit就退出
line = strings.Trim(line, "\r\n")
if line == "exit"{
fmt.Println("客户端退出")
break
}
//将读取的数据发送给服务端
_,err = conn.Write([]byte(line + "\n") )
if err != nil {
fmt.Println("conn.Write err:",err)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)