Go语言服务器开发之简易TCP客户端与服务端实现方法

本文实例讲述了Go语言服务器开发之简易TCP客户端与服务端实现方法。分享给大家供大家参考。具体实现方法如下:

Go语言具备强大的服务器开发支持,这里示范了最基础的服务器开发:通过TCP协议实现客户端与服务器的通讯。

一 服务端,为每个客户端新开一个goroutine

代码如下:

func ServerBase() { 
    fmt.Println("Starting the server...") 
    //create listener 
    listener, err := net.Listen("tcp", "192.168.1.27:50000") 
    if err != nil { 
        fmt.Println("Error listening:", err.Error()) 
        return 
    } 
 
    // listen and accept connections from clients: 
    for { 
        conn, err := listener.Accept() 
        if err != nil { 
            fmt.Println("Error accepting:", err.Error()) 
            return 
        } 
        //create a goroutine for each request. 
        go doServerStuff(conn) 
    } 

 
func doServerStuff(conn net.Conn) { 
    fmt.Println("new connection:", conn.LocalAddr()) 
    for { 
        buf := make([]byte, 1024) 
        length, err := conn.Read(buf) 
        if err != nil { 
            fmt.Println("Error reading:", err.Error()) 
            return 
        } 
 
        fmt.Println("Receive data from client:", string(buf[:length])) 
    } 
}

二 客户端 连接服务器,并发送数据

代码如下:

func ClientBase() { 
    //open connection: 
    conn, err := net.Dial("tcp", "192.168.1.27:50000") 
    if err != nil { 
        fmt.Println("Error dial:", err.Error()) 
        return 
    } 
 
    inputReader := bufio.NewReader(os.Stdin) 
    fmt.Println("Please input your name:") 
    clientName, _ := inputReader.ReadString('\n') 
    inputClientName := strings.Trim(clientName, "\n") 
 
    //send info to server until Quit 
    for { 
        fmt.Println("What do you send to the server? Type Q to quit.") 
        content, _ := inputReader.ReadString('\n') 
        inputContent := strings.Trim(content, "\n") 
        if inputContent == "Q" { 
            return 
        } 
 
        _, err := conn.Write([]byte(inputClientName + " says " + inputContent)) 
        if err != nil { 
            fmt.Println("Error Write:", err.Error()) 
            return 
        } 
    } 
}

注:由于LiteIDE不支持同时运行多个程序,所以需要在终端通过 go run 命令来同时运行服务端和(一个或多个)客户端,可观察到服务器对并发访问的支持。

希望本文所述对大家的Go语言程序设计有所帮助。

(0)

相关推荐

  • golang之tcp自动重连实现方法

    操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连. 测试服务器示例代码: /* tcp server for test */ package main import ( "fmt" "net" "os" "strings" "time" ) func checkError(err err

  • 利用Golang实现TCP连接的双向拷贝详解

    前言 本文主要给大家介绍了关于Golang实现TCP连接的双向拷贝的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 最简单的实现 每次来一个Server的连接,就新开一个Client的连接.用一个goroutine从server拷贝到client,再用另外一个goroutine从client拷贝到server.任何一方断开连接,双向都断开连接. func main() { runtime.GOMAXPROCS(1) listener, err := net.Liste

  • GO语言实现简单TCP服务的方法

    本文实例讲述了GO语言实现简单TCP服务的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import ( "net" "fmt" ) var (   maxRead = 1100     msgStop   = []byte("cmdStop")     msgStart  = []byte("cmdContinue")     ) func main() {       ho

  • Go语言服务器开发之简易TCP客户端与服务端实现方法

    本文实例讲述了Go语言服务器开发之简易TCP客户端与服务端实现方法.分享给大家供大家参考.具体实现方法如下: Go语言具备强大的服务器开发支持,这里示范了最基础的服务器开发:通过TCP协议实现客户端与服务器的通讯. 一 服务端,为每个客户端新开一个goroutine 复制代码 代码如下: func ServerBase() {      fmt.Println("Starting the server...")      //create listener      listener,

  • Python基于socket实现TCP客户端和服务端

    目录 一.基于socket实现的TCP客户端 二.基于socket实现的TCP服务端 一.基于socket实现的TCP客户端 import socket   # 建立socket对象 # 参数一表示IP地址类型(AF_INET为IPV4,AF_INET6为IPV6),参数二表示连接的类型(SOCK_STREAM表示TCP形式,SOCK_DGRAM表示UDP形式) client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # 代

  • 基于node的tcp客户端和服务端的简单通信

    目录 1.简单介绍下TCP/IP 2.服务端编程 监听客户端连接 接收数据和发送数据 3.客户端编程 4.一个小的登录系统 1.简单介绍下TCP/IP TCP/IP是互联网相关协议的集合,分为以下四层:应用层.传输层.网络层.数据链路层. 分成四层的好处是,假如只有一层,某个地方需要改变设计时,就必须把所有整体替换掉,而分层之后只需把变动的层替换掉即可. 2. 服务端编程 node提供了net模块来实现tcp编程.主要分为服务端编程和客户端编程两部分,先来写服务端的: 监听客户端连接 先引入ne

  • 使用AjaxPro.Net框架实现在客户端调用服务端的方法

    此文档将使用AjaxPro.Net框架实现Ajax功能:在客户端异步调用服务端方法.AjaxPro.Net是一个优秀的.net环境下的Ajax框架,用法很简单,可以查阅相关资料,本文档是一个简单的实例讲述使用AjaxPro的几个关键点. 1.下载AjaxPro 组件.并将AjaxPro.dll引用到网站(或项目).下载:Download latest version 7.7.31.1. 2.修改Web.config.在 <system.web> 元素中添加以下代码. <configura

  • Go语言服务器开发之客户端向服务器发送数据并接收返回数据的方法

    本文实例讲述了Go语言服务器开发之客户端向服务器发送数据并接收返回数据的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package mysocket    import (      "fmt"      "io"      "net"  )    func MySocketBase() {      var (          host   = "www.apache.org"         

  • Go语言服务器开发实现最简单HTTP的GET与POST接口

    本文实例讲述了Go语言服务器开发实现最简单HTTP的GET与POST接口.分享给大家供大家参考.具体分析如下: Go语言提供了http包,可以很轻松的开发http接口.以下为示例代码: 复制代码 代码如下: package webserver    import (      "encoding/json"      "fmt"      "net/http"      "time"  )    func WebServerB

  • java 中模拟TCP传输的客户端和服务端实例详解

    一.创建TCP传输的客户端 1.建立TCP客户端的Socket服务,使用的是Socket对象,建议该对象一创建就明确目的地,即要连接的主机: 2.如果连接建立成功,说明数据传输通道已建立,该通道就是Socket流,是底层建立好的,既然是流,说着这里既有输入流,又有输出流,想要输入流或者输出流对象,可以通过Socket来获取,可以通过getOutputStream()和getInputStream()来获取: 3.使用输出流,将数据写出: 4.关闭Socket服务. import java.io.

  • Qt基于TCP实现客户端与服务端的连接

    Qt TCP的客户端与服务端的连接,供大家参考,具体内容如下 可以实现局域网内简单的信息传递(文件传输,稍后更新) 界面是用ui设计师做的简单设计 客户端 (1).ClientWidget.h 头文件 #ifndef CLIENTWIDGET_H #define CLIENTWIDGET_H #include <QWidget> #include "ui_ClientWidget.h" #include <QTcpSocket> #include <QHo

  • tcp socket客户端和服务端示例分享

    以下是tcp socket客户端和服务端源码,代码简单大家参考使用吧 Tcp Server 复制代码 代码如下: #include <WinSock2.h>#include <stdio.h>#pragma comment(lib, "ws2_32.lib")int main(){// initial socket libraryWORD wVerisonRequested;WSADATA wsaData;int err;wVerisonRequested =

  • Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例

    本文实例讲述了Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能.分享给大家供大家参考,具体如下: 由于目前工作的需要,需要在IPv4和IPv6两种网络模式下TCP和UDP的连接,要做到客户端发包,服务端收包. 前几天写了代码,但是把UDP的客户端和服务端使用TCP模式的代码了.今天在公司使用该工具的时候,发现了问题,忘记了UDP不需要验证.疏忽,疏忽.不过刚刚接触编程,可以原谅. 现在在家,已经把代码改好了.经测试可以使用. 先运行客户端: python Mini

随机推荐