// cln
package main
import (
"bufio"
"fmt"
"net"
"os"
"time"
)
func getMsg() (msg string) {
reader := bufio.NewReader(os.Stdin)
msg, err := reader.ReadString('\n')
if err != nil {
fmt.Println(err.Error())
}
return
}
func recv(clnSck net.Conn) {
// read msg from server.
buf := make([]byte, 1024)
dataLen, err := clnSck.Read(buf)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(string(buf[:dataLen]))
}
func main() {
// func ResolveTCPAddr(net“一般是tcp,兼容tcp4,6”, addr string“ip地址及端口号(两者均是字符串类型)”)
// (返回 *TCPAddr"结构体,包含ip地址和端口号", os.Error)
//导入一个tcp下的ip地址,srv是一个储存了tcp地址的指针
srv, err := net.ResolveTCPAddr("tcp", "127.0.0.1:6666")
if err != nil {
fmt.Println(err)
return
}
//func DialTCP(net string“同上”, laddr“本地地址,可以为nil”, raddr“远程地址,用上面的srv表示” *TCPAddr“laddr,raddr均是结构体”)
//(返回 c *TCPConn“连接类型的指针”, err os.Error)
//尝试连接这个地址,clnSck是个网络连接流(conn)
clnSck, err := net.DialTCP("tcp", nil, srv)
//以上两句等同于 clnSck, err := net.Dial("tcp", "127.0.0.1:6666")
if err != nil {
fmt.Println(err)
return
}
//将网络连接流的关闭 压入栈中
defer clnSck.Close()
//开启新的线程接收信息
go recv(clnSck)
//从键盘输入新消息到字符串类型msg
msg := getMsg()
//向网络流中写入信息msg(从键盘中获取)
clnSck.Write([]byte(msg))
getMsg()
//clnSck.Close()
}