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服务器端与客户端通信的示例。

阅读剩余 58%

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

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

相关文章

  • idea中如何导入一个maven项目并配置相关设置

    在 IntelliJ IDEA 中导入一个 Maven 项目并配置相关设置的步骤如下: 打开 IntelliJ IDEA,点击“File” -> “New” -> “Project”,选择“Maven”并点击“Next”。 在“ Project”窗口中,选择“Create from archetype”并选择“maven-archetype-qu…

    other 2023年5月7日
    00
  • 网页版 B 站导致 CPU 占用高的原因分析与解决方案

    网页版 B 站导致 CPU 占用高的原因分析与解决方案 原因分析 使用网页版 B 站时,可能会遇到 CPU 占用率高的问题,这是由于以下原因导致的: Flash 插件过期。网页版 B 站使用 Flash 插件播放视频,而 Flash 插件已经停止更新,过期后容易出现性能问题。 浏览器缓存过多。浏览器缓存太多会导致卡顿,而网页版 B 站播放视频时需要大量缓存数…

    other 2023年6月26日
    00
  • Go导入不同目录下包报错的解决方法

    Go导入不同目录下包报错的解决方法 在Go语言中,当我们在一个包中导入另一个不同目录下的包时,有时会遇到导入报错的情况。这可能是由于包的路径设置不正确或GOPATH环境变量配置错误导致的。下面是解决这个问题的两种常见方法: 方法一:使用绝对路径导入包 如果你的项目中的包位于不同的目录下,你可以使用绝对路径来导入包。例如,假设你的项目结构如下: – proje…

    other 2023年10月13日
    00
  • 腾讯云万象优图每个账户提供50G的图片存储(支持黄图检测)

    下面是关于腾讯云万象优图图片存储的完整攻略,包括图片存储的基本概念、使用方法和两个示例等方面。 图片存储的基本概念 腾讯云万象优图图片存储是一种云端图片存储服务,它提供了高效、安全、可靠的图片存储和管理功能。图片存储的核心概念包括存储桶、对象、访问控制等。 使用方法 使用腾讯云万象优图图片存储可以分为以下几个步骤: 创建存储桶,例如创建一个名为“mybuck…

    other 2023年5月6日
    00
  • 详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

    下面是 “详解利用 Dockerfile 构建 MySQL 镜像并实现数据的初始化及权限设置”的完整攻略。 什么是 Dockerfile? Dockerfile 是 Docker 镜像的构建文件,它是一个包含了一系列构建指令的文本文件。Docker 构建镜像时,会根据 Dockerfile 的每个指令依次构建,最终生成 Docker 镜像。 Dockerfi…

    other 2023年6月20日
    00
  • 创建Go工程化项目布局详解

    创建Go工程化项目布局详解 在创建Go语言项目时,良好的项目布局是非常重要的。它可以提高代码的可读性、可维护性和可扩展性。下面是一个详细的攻略,介绍如何创建一个具有良好项目布局的Go工程。 1. 创建项目目录结构 首先,创建一个项目的根目录。在该目录下,可以按照以下结构创建子目录: myproject/ ├── cmd/ │ └── myapp/ │ └──…

    other 2023年9月5日
    00
  • Java getResource()如何获取class文件目录位置

    Java中的getResource()方法用于从类路径中获取资源,获取资源的路径可以是绝对路径,也可以是相对路径。方法的返回值是一个URL对象。 下面我们来讲解如何使用getResource()方法获取class文件目录位置: 获取class文件所在目录绝对路径 获取class文件所在目录的绝对路径可以使用以下代码: URL url = xxx.class.…

    other 2023年6月27日
    00
  • 【前端基础】动态脚本与JSONP

    【前端基础】动态脚本与JSONP 在前端开发中,动态脚本和JSONP是两个非常重要的概念,它们可以帮助我们更好地构建Web应用。本文将介绍这两个概念,以及如何在实际开发中使用它们。 动态脚本 动态脚本是指在客户端动态加载、执行的JavaScript脚本。在传统的静态页面中,所有的脚本都是在HTML中直接写出来的,但是当我们面对一些复杂的业务逻辑时,需要动态地…

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