Golang TCP服务端及客户端小实例

突然想测试下自己的学习能力,当然本次的测试可能不是很准确,因为之前已经会编写一些代码了,比如python,tcl,批处理以及公司大佬自己开发的一个脚本语言braise,所以使用学习golang来测试自己的学习能力,我并不确定测试结果是否准确。
下面是最近学习到了tcp,udp变成的地方,写的小实例。

tcp server端代码,可以在客户端断开连接后,服务端继续保持正常运行。对了,golang不允许在命名函数的时候使用下划线作为函数名字的一部分。

package main

import (
"fmt"
"net"
"os"
)

func serverhanderror(err error, when string) {
if err != nil {
fmt.Println(err, when)
os.Exit(1)
}
}

func main() {
listener, err := net.Listen("tcp", "127.0.0.1:7777")
serverhanderror(err, "net.ListenTCP")
for {
conn, err := listener.Accept()
serverhanderror(err, "listener.Accept")
go withhandler(conn)
}

}

func withhandler(conn net.Conn) {
buffer := make([]byte, 1024)

for {
	n, err := conn.Read(buffer)
	serverhanderror(err, "conn.Read")
	clientmsg := string(buffer[:n])
	if clientmsg != "bye" {
		fmt.Printf("收到客户端%s的数据%s\n", conn.RemoteAddr(), clientmsg)
		conn.Write([]byte("服务端已收到客户端的数据:" + clientmsg))
	} else {
		conn.Write([]byte("bye"))
		break
	}
}

fmt.Println("客户端已断开连接")

}

tcp client 代码

package main

import (
"bufio"
"fmt"
"net"
"os"
)

func clienthanderror(err error, when string) {
if err != nil {
fmt.Println(err, when)
os.Exit(1)
}
}

func main() {
tcpconn, err := net.Dial("tcp", "127.0.0.1:7777")
clienthanderror(err, "net.Dia")

reader := bufio.NewReader(os.Stdin)
buffer := make([]byte, 1024)

for {
	linebytes, _, err := reader.ReadLine()
	clienthanderror(err, "reader.ReadLine")
	if linebytes != nil {
		tcpconn.Write(linebytes)
	} else {

	}
	n, err := tcpconn.Read(buffer)
	clienthanderror(err, "tcpconn.Read")
	servermsg := string(buffer[0:n])
	if servermsg != "bye" {
		fmt.Printf("接收到服务端信息:%s\n", servermsg)
	} else {
		fmt.Println("客户端断开了连接!")
		break
	}

}

}

猜你喜欢

转载自www.cnblogs.com/warrior-tian/p/12825498.html