Go实战--实现一个简单的tcp服务端和客户端(The way to go)
来源:互联网 发布:网络最火的手游 编辑:程序博客网 时间:2024/04/30 19:16
生命不止,继续 go go go !!!
之前介绍了go为我们提供的net/http包,很方便的创建一些api。
今天就来点实战,写一个简单的tcp的服务端、客户端程序。
按照国际惯例,还是先介绍一点点基础知识。
* net.Listen*
Listen announces on the local network address laddr. The network net must be a stream-oriented network: “tcp”, “tcp4”, “tcp6”, “unix” or “unixpacket”. For TCP and UDP, the syntax of laddr is “host:port”, like “127.0.0.1:8080”. If host is omitted, as in “:8080”, Listen listens on all available interfaces instead of just the interface with the given host address. See Dial for more details about address syntax.
Listening on a hostname is not recommended because this creates a socket for at most one of its IP addresses.
func Listen(net, laddr string) (Listener, error)
所以我们的server端就可以这么写:
ln, _ := net.Listen("tcp", "localhost:8081")
bufio.NewReader
NewReader returns a new Reader whose buffer has the default size.
func NewReader(rd io.Reader) *Reader
Write
func (c *IPConn) Write(b []byte) (int, error)
Write implements the Conn Write method.
net.Dial
func (d *Dialer) Dial(network, address string) (Conn, error)
Dial connects to the address on the named network.
See func Dial for a description of the network and address parameters.
基础知识介绍差不多了,下面我们开始写代码了。
tcp_server.go
package mainimport "net"import "fmt"import "bufio"import "strings" func main() { fmt.Println("Launching server...") // listen on all interfaces ln, _ := net.Listen("tcp", "localhost:8081") // accept connection on port conn, _ := ln.Accept() // run loop forever (or until ctrl-c) for { // will listen for message to process ending in newline (\n) message, _ := bufio.NewReader(conn).ReadString('\n') // output message received fmt.Print("Message Received:", string(message)) // sample process for string received newmessage := strings.ToUpper(message) // send new string back to client conn.Write([]byte(newmessage + "\n")) }}
tcp_client.go
package mainimport "net"import "fmt"import "bufio"import "os"func main() { // connect to this socket conn, _ := net.Dial("tcp", "localhost:8081") for { // read in input from stdin reader := bufio.NewReader(os.Stdin) fmt.Print("Text to send: ") text, _ := reader.ReadString('\n') // send to socket fmt.Fprintf(conn, text + "\n") // listen for reply message, _ := bufio.NewReader(conn).ReadString('\n') fmt.Print("Message from server: "+message) }}
- Go实战--实现一个简单的tcp服务端和客户端(The way to go)
- Go实战--实现一个简单聊天室chatroom(The way to go)
- Go实战--实现简单的restful api(The way to go)
- Go实战--实现一个自己的网络请求日志httplogger(The way to go)
- Go实战--go中函数(function)和方法(method)的使用(The way to go)
- Go实战--实现一个单向链表(The way to go)
- Go实战--实现一个并发时钟服务器(The way to go)
- Go实战--go中编码转换(The way to go)
- Go实战--go中使用libphonenumber(The way to go)
- Go实战--go中使用cookie(The way to go)
- Go实战--go中使用rpc(The way to go)
- Go实战--go中一些有用的代码片段(The way to go)
- Go实战--go中函数递归(recursion)的使用(The way to go)
- Go实战--golang新手入门常见错误(The way to go)
- Go实战--golang生成uuid(The way to go)
- The way to go !
- Go实战--net/http中JSON的使用(The way to go)
- Go实战--压缩zip和解压缩unzip的应用(The way to go)
- C语言正则表达式详解 regcomp() regexec() regfree()详解
- 模板_poj1201Intervals_差分约束系统解决(类区间问题)
- 潜水员
- 结业作业:博客首页
- SQL where 1=1
- Go实战--实现一个简单的tcp服务端和客户端(The way to go)
- Material Designer扁平化设计
- LeetCode#63. Unique Paths II
- USACO 1.1 黑色星期五 (模拟)
- ArrayList源码分析(JDK1.8)
- NYOJ 三角形面积
- Android APK对齐总结
- 《CSS权威指南》读书笔记5
- 图像处理之二维高斯滤波详解