关闭

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

标签: gotcp
7014人阅读 评论(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)
    }
}

这里写图片描述

1
0
查看评论

go简易tcp socket客户端和服务器

go简易tcp socket客户端和服务器1.Socket编程以前使用Socket编程时,一般是如下步骤 建立socket,socket 绑定socket,bind 监听,listen 接受连接,accept 接受/发送,recv/send go tcp版真的很省事 服务端: 就是Listen、...
  • qq_15437667
  • qq_15437667
  • 2016-04-02 02:02
  • 5593

Go语言TCP网络编程(详细)

一、序言 Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中...
  • hacker00011000
  • hacker00011000
  • 2016-12-28 17:04
  • 6056

golang tcp 客户端

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

从零开始写Go网络通信框架(5)——断线重连

在上面的4篇文章中,我们已经搭建了一个简易的socket通讯框架,但是有一个问题。如果服务端主动关闭了连接,这时候client端就接收不到服务端发送的消息。这时候我们就需要做一个断线重连的处理。 在这里,我们采用判断共享内存的方式,既当接收不到服务器端发送的消息时,向channel中写入数据。 ...
  • MyPC2010
  • MyPC2010
  • 2017-10-18 19:33
  • 266

Go net包介绍

与大多数语言一样,Go的标准库很全,因为Go的出现本来就是为了网络通信的高并发实现,所以其相关的网络库封装得更简洁,更Readable。这里来大致介绍几个网络库,掌握了学习方法,那么只要里面有那个库,你就能找到,就能快速了解怎么查阅。net.ResolveIPAddr()根据域名查找IP地址不得不感...
  • cc7756789w
  • cc7756789w
  • 2016-03-30 15:15
  • 2171

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

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

Go tcp通信

//server端 package main import ( "fmt" "net" "os" "strconv" "strings" "time" //&qu...
  • fjgui
  • fjgui
  • 2016-08-11 21:37
  • 222

c语言客户端与go语言服务端通信(网络字节序)

网络二进制数据转换:      总所周知,数据在tcp网络传输协议中传输的字节序是大端模式的,换句话说如果你要传输一个int32型的整数,那么假设其二进制小端模式表示为11111111111111110000000000000000那么其大端模式表...
  • whatday
  • whatday
  • 2017-07-14 09:14
  • 725

Go语言(服务器开发):客户端向服务器发送数据并接收返回数据

客户端向服务器发送数据并接收返回数据。 示例代码:
  • books1958
  • books1958
  • 2014-09-24 18:26
  • 1506

golang实现TCP网络编程

上一节简单介绍了TCP以及socket等基本理论,今天我们尝试用go分别从客户端和服务端对其实现。 golang实现服务端socket package main import ( "net" "fmt"...
  • benben_2015
  • benben_2015
  • 2018-02-10 18:22
  • 30
    个人资料
    • 访问:4738587次
    • 积分:42178
    • 等级:
    • 排名:第97名
    • 原创:571篇
    • 转载:29篇
    • 译文:13篇
    • 评论:784条
    微信公众号
      我的微信公众号
      为你推荐最新的博文~更有惊喜等着你
    时光荏苒
      白驹过隙
    博客专栏
    文章分类
    百度统计
    Google Analytics