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日

相关文章

  • 浅谈Android客户端与服务器的数据交互总结

    浅谈Android客户端与服务器的数据交互总结 Android客户端与服务器的数据交互是Android开发中非常重要的一个环节。本篇攻略将介绍其中的一些通用技术和方法,并结合两个简单的示例说明。 一、网络通信基础 网络通信的基础是HTTP协议,它是Web开发中常用的协议。HTTP协议主要有GET和POST两个常用的请求方法,分别用于数据的获取和提交。对应到A…

    other 2023年6月27日
    00
  • 详解Android更改APP语言模式的实现过程

    详解Android更改APP语言模式的实现过程 在Android应用程序中,更改APP语言模式是一个常见的需求,特别是在多语言环境下。下面是一个详细的攻略,介绍了如何实现这一功能。 步骤1:准备多语言资源文件 首先,我们需要准备多语言资源文件。在Android项目的res目录下创建一个新的文件夹,命名为values。然后,为每种语言创建一个新的文件夹,例如v…

    other 2023年9月7日
    00
  • Vue使用Swiper封装轮播图组件的方法详解

    Vue使用Swiper封装轮播图组件的方法详解 本文将为您详细介绍在Vue项目中使用Swiper插件封装轮播图组件的方法。Swiper是一款特别优秀的移动端轮播图插件,使用起来非常方便,配合Vue框架使用更是如虎添翼。 安装Swiper插件 首先,我们需要安装Swiper插件。可以通过npm来安装,命令如下: npm install swiper –sav…

    other 2023年6月25日
    00
  • windows读取ext4硬盘

    Windows 读取 ext4 硬盘 如果你在 Windows 操作系统上使用 ext4 文件系统格式的硬盘,你可能会遇到无法打开硬盘和文件的问题。这是因为 Windows 并不支持 ext4 文件系统,而只能支持自己的 NTFS 和 FAT32 格式。 然而,如果你需要从 Windows 访问 ext4 硬盘中的数据,有一些方法可以帮助你解决这个问题。 方…

    其他 2023年3月28日
    00
  • C语言递归思想实现汉诺塔详解

    C语言递归思想实现汉诺塔详解 什么是汉诺塔问题? 汉诺塔问题是一个古老的数学谜题,也是递归思想的典型应用。问题由以下三个规则定义: 有三根杆子,第一根杆子上有若干个直径大小不一的圆盘,第二根杆子上一个圆盘没有,第三根杆子上一个圆盘没有。 每次只能移动一个盘子。 大盘子不能放在小盘子上面。 目标是从初始状态移动所有圆盘到最后一根杆子上。我们可以用 A、B、C …

    other 2023年6月27日
    00
  • Nginx基础学习之realip模块的使用方法

    Nginx基础学习之realip模块的使用方法 简介 在Nginx中,realip模块用于获取真实客户端的IP地址。当Nginx作为反向代理服务器时,客户端的IP地址会被代理服务器的IP地址所替代。realip模块可以解决这个问题,将真实的客户端IP地址还原出来。 安装和配置 首先,确保你已经安装了Nginx。如果没有安装,可以参考Nginx的官方文档进行安…

    other 2023年8月21日
    00
  • Linux下获取公网IP地址的方法

    Linux下获取公网IP地址的方法 在Linux系统中,有多种方法可以获取公网IP地址。下面是两种常用的方法示例: 方法一:使用curl命令获取公网IP地址 打开终端,输入以下命令安装curl工具(如果已经安装则可以跳过此步骤): shell sudo apt-get install curl 在终端中输入以下命令获取公网IP地址: shell curl i…

    other 2023年7月30日
    00
  • http状态码查询

    HTTP状态码查询 在进行Web开发和网络通信时,我们经常会遇到HTTP状态码。HTTP状态码是服务器返回给客户端的数字代码,用以表示当前请求的处理情况。了解HTTP状态码的含义和用法,可以帮助我们更好地定位和排查问题。 HTTP状态码的分类 HTTP状态码分为5类,每一类都以一个数字开头。具体分类如下: 1xx:信息状态码。表示Web服务器已经接收到请求,…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部