Go实战--实现一个简单的tcp服务端和客户端(The way to go)

标签: go tcp
7172人阅读 评论(0) 收藏 举报
分类:

生命不止,继续 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 main

import "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 main

import "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 socket客户端和服务器

go简易tcp socket客户端和服务器1.Socket编程以前使用Socket编程时,一般是如下步骤 建立socket,socket 绑定socket,bind 监听,listen 接受连接,ac...
  • qq_15437667
  • qq_15437667
  • 2016-04-02 02:02:53
  • 6350

强烈推荐C#与VB.NET网络通信开发实战

关于C#与VB.NET网络通信开发实战 评论读后感:说实话,这书写的真是相当的一般,一共就250页,书价还39元,相当的不值,而且通篇的贴代码,信息量很小,我也只是随便买来看看的,想猎奇,但很失望,而...
  • lang_csdn
  • lang_csdn
  • 2010-12-08 12:17:00
  • 2570

go实现一个简单的游戏服务器框架(lotou)网络通信

代码仓库,目前代码比较粗糙,欢迎各种改进建议。 网络通信相关代码请查下以下链接(https://github.com/sydnash/lotou/tree/master/network/tcp)目...
  • sydnash
  • sydnash
  • 2016-12-09 10:37:44
  • 1819

Golang实战【简易爬虫】

周末无聊,之前看完了GO 的教程不知到写点什么,思来想去,爬虫不是很有趣吗? 实现效果如下(因为没什么有用的数据 就懒得存数据库了 嘻嘻 你们感兴趣的同学可以自己实现) 之前打算爬boss直聘的...
  • qq_25504271
  • qq_25504271
  • 2017-11-18 16:43:41
  • 767

用Go实现的简易TCP通信框架

接触到GO之后,GO的网络支持非常令人喜欢。GO实现了在语法层面上可以保持同步语义,但是却又没有牺牲太多性能,底层一样使用了IO路径复用,比如在LINUX下用了EPOLL,在WINDOWS下用了IOC...
  • linuxheik
  • linuxheik
  • 2016-09-23 16:55:58
  • 839

Go实战--golang中使用WebSocket实时聊天室(gorilla/websocket、nkovacs/go-socket.io)

生命不止,继续 go go go!!!其实,早就应该跟大家分享golang中关于websocket的使用,但是一直不知道从何入手,也不能够很清晰的描述出来。今天就浅尝辄止,通过第三方库实现websoc...
  • wangshubo1989
  • wangshubo1989
  • 2017-10-16 16:04:42
  • 15606

golang tcp 客户端

最近找了网上tcp客户端的例子,都不是很好,特今天写一个tcp 客户端案例。 1.新建tcpclient结构体: type TcpClientModel struct { Conn...
  • niyuelin1990
  • niyuelin1990
  • 2017-09-06 17:27:29
  • 735

使用 Go 和 WebSockets 构建实时聊天服务器

http://www.oschina.net/translate/build-a-realtime-chat-server-with-go-and-websockets WebSoc...
  • vegeta_ma
  • vegeta_ma
  • 2017-05-19 16:06:42
  • 3530

Go实战--实现一个简单的tcp服务端和客户端(The way to go)

生命不止,继续 go go go !!!之前介绍了go为我们提供的net/http包,很方便的创建一些api。今天就来点实战,写一个简单的tcp的服务端、客户端程序。按照国际惯例,还是先介绍一点点基础...
  • wangshubo1989
  • wangshubo1989
  • 2017-04-24 20:45:23
  • 7172

golang tcp 回显服务器示例

golang代码服务器: package main import ( //"io" "log" "net" "time" "fmt" "runtime" ) func main() { ...
  • u011363248
  • u011363248
  • 2014-02-14 09:50:40
  • 1276
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 500万+
    积分: 4万+
    排名: 93
    Google Analytics
    博客专栏
    文章分类