Go语言基于Socket编写服务器端与客户端通信的实例

下面我将详细讲解Go语言基于Socket编写服务器端与客户端通信的实例的攻略。

1. Socket简介

在网络编程中,Socket是一个抽象层,它负责建立让网络应用程序之间可以相互通讯的规范。通过Socket API,程序员可以方便地使用TCP/IP协议族进行网络通信。Socket是两个端点之间的双向通信,其中一个端点是服务器,另一个是客户端。

2. 基本流程

Go语言基于Socket编写服务器端与客户端通信的基本流程如下:
* 创建Socket
* 绑定Socket
* 监听Socket
* 接收客户端连接请求
* 处理客户端请求
* 关闭Socket

3. 示例1:基于Socket编写TCP服务器端

下面是一个基于Socket编写TCP服务器端的示例代码:

package main

import (
    "fmt"
    "net"
)

func main() {
    // 创建socket,监听端口
    l, err := net.Listen("tcp", ":8080")
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        return
    }
    // 等待客户端连接
    for {
        conn, err := l.Accept()
        if err != nil {
            fmt.Println("Error accepting: ", err.Error())
            continue
        }
        // 开启新线程处理客户端请求
        go handleRequest(conn)
    }
}

func handleRequest(conn net.Conn) {
    // 缓存区,我们使用256B大小的缓存区读取数据
    buf := make([]byte, 256)
    // 读取客户端发送的数据
    reqLen, err := conn.Read(buf)
    if err != nil {
        fmt.Println("Error reading:", err.Error())
    }
    // 打印客户端发送的数据
    fmt.Printf("Received data: %s\n", string(buf[:reqLen]))
    // 发送响应给客户端
    conn.Write([]byte("Hello from server!"))
    // 关闭连接
    conn.Close()
}

上述代码通过监听8080端口,接收客户端连接请求,并使用新线程处理客户端请求。handleRequest函数用于处理客户端请求,代码中使用256B的缓存区读取数据,并将客户端发送的数据打印到控制台上,然后向客户端发送一个字符串"Hello from server!",并关闭连接。

4. 示例2:基于Socket编写TCP客户端

下面是一个基于Socket编写TCP客户端的示例代码:

package main

import (
    "fmt"
    "net"
)

func main() {
    // 连接服务器
    conn, err := net.Dial("tcp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("Error dialing:", err.Error())
        return
    }
    // 发送数据给服务器
    _, err = conn.Write([]byte("Hello from client!"))
    if err != nil {
        fmt.Println("Error writing:", err.Error())
        return
    }
    // 缓冲区,我们使用256B大小的缓存区读取数据
    buf := make([]byte, 256)
    // 读取服务器响应
    resLen, err := conn.Read(buf)
    if err != nil {
        fmt.Println("Error reading:", err.Error())
        return
    }
    // 打印服务器响应
    fmt.Printf("Received data: %s\n", string(buf[:resLen]))
    // 关闭连接
    conn.Close()
}

上述代码中,我们使用net包中的Dial函数连接服务器,并向服务器发送数据"Hello from client!"。接着,我们使用256B的缓存区读取服务器发送的响应数据,并将其打印到控制台上,最后关闭连接。

以上是基于Socket编写Go语言TCP服务器端与客户端通信的示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Go语言基于Socket编写服务器端与客户端通信的实例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 【mysql】计算tps qps的方式

    【mysql】计算tps qps的方式 在数据库中,TPS (Transaction Per Second) 指的是每秒钟系统能够处理的事务数,是衡量系统处理能力的重要指标之一。而 QPS (Queries Per Second) 则是每秒处理的查询数量。本文将介绍如何通过 mysql 自带的工具计算出 tps 和 qps。 计算 TPS 在 mysql 中…

    其他 2023年3月28日
    00
  • plsql无法解析指定的连接标识符

    PL/SQL无法解析指定的连接标识符 PL/SQL是一种面向过程的编程语言,在Oracle数据库中广泛使用。但是,有时候在编写PL/SQL程序时,可能会遇到“无法解析指定的连接标识符”的错误。本文将详细介绍这个错误的原因和解决方法。 错误原因 一个PL/SQL程序可以包含一个或多个连接到数据库的语句。这些语句通常使用Oracle提供的标准连接标识符,如下所示…

    其他 2023年3月29日
    00
  • 深入sql oracle递归查询

    深入SQL Oracle递归查询 递归查询是一种常用的查询方式,特别是在层级关系查询。Oracle数据库支持递归查询,本文将深入讲解SQL Oracle递归查询的完整攻略,涵盖递归查询的用法、示例、及其它关键细节。 什么是递归查询? 递归查询就是在查询的过程中包含了自身,通常是用来查询树形结构的数据。递归查询可以将一组数据从根节点深入到查询所有子节点,从而得…

    other 2023年6月27日
    00
  • 常用批处理内部命令使用详解

    常用批处理内部命令使用详解 简介 批处理是可以用来批量执行指令的脚本语言,常用于Windows系统中。批处理有许多内部命令可以使用,此文档将详细讲解批处理中常用的内部命令及其用法。 命令说明 ECHO ECHO命令可以输出文字、变量或命令的执行结果到屏幕上。 语法: ECHO [ON | OFF] [message] 示例: 输出“Hello World!”…

    other 2023年6月26日
    00
  • SpringCloud学习笔记之OpenFeign进行服务调用

    下面我来给你详细讲解 SpringCloud 学习笔记中的 OpenFeign 进行服务调用的完整攻略。 什么是 OpenFeign OpenFeign 是一个基于 Netflix Feign 客户端的开源声明式服务调用框架,它比 RestTemplate 更加简洁、方便、灵活。它的主要作用是帮助开发者快速便捷地实现微服务之间的调用。 如何使用 OpenFe…

    other 2023年6月27日
    00
  • 小米6总是自动重启怎么办?小米6自动重启的解决方法

    小米6总是自动重启怎么办? 小米6自动重启的问题可能会影响你的使用体验,这种情况的出现很有可能是由于软件问题或者硬件故障导致的。如果你正在面对这个问题,那么你需要按照以下步骤来诊断和解决这个问题。 1. 清除设备的缓存 清除设备的缓存是解决许多小米6常见问题的第一步。缓存数据可以堆积并导致设备出现问题,这可能会导致设备频繁重启。为了清除缓存数据,你必须进入设…

    other 2023年6月27日
    00
  • 详谈spring boot中几种常见的依赖注入问题

    我们来详细讲解一下“详谈Spring Boot中几种常见的依赖注入问题”的攻略。 1. 什么是依赖注入? 依赖注入(Dependency Injection)是一种设计模式,用于减少代码之间的耦合度。在应用中,对象不会直接从其他对象获取它们依赖的资源,而是通过将其依赖项注入到该对象中来实现。这种方式能够使代码更为模块化和可测试。 2. Spring Boot…

    other 2023年6月27日
    00
  • Android 中 android.view.WindowLeaked的解决办法

    以下是详细讲解 Android 中 android.view.WindowLeaked 的解决办法的完整攻略。 概述 在开发 Android 应用的过程中,如果出现 android.view.WindowLeaked 错误,那么应用程序会崩溃并退出,这是非常尴尬的。这个错误的原因是因为在 Activity 被销毁之前,用户手动关闭了 Activity 或者发…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部