您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页go语言 tcp服务器,go语言实现 tcp客户端/服务端

go语言 tcp服务器,go语言实现 tcp客户端/服务端

来源:华拓科技网

/server.go/

package main

import (

"bufio"

"fmt"

"net"

"time"

)

func main() {

var tcpAddr *net.TCPAddr

tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:9999")

tcpListener, _ := net.ListenTCP("tcp", tcpAddr)

defer tcpListener.Close()

for {

tcpConn, err := tcpListener.AcceptTCP()

if err != nil {

continue

}

fmt.Println("A client connected : " + tcpConn.RemoteAddr().String())

go tcpPipe(tcpConn)

}

}

func tcpPipe(conn *net.TCPConn) {

ipStr := conn.RemoteAddr().String()

defer func() {

fmt.Println("disconnected :" + ipStr)

conn.Close()

}()

reader := bufio.NewReader(conn)

for {

message, err := reader.ReadString('\n')

if err != nil {

return

}

fmt.Println(string(message))

msg := time.Now().String() + "\n"

b := []byte(msg)

conn.Write(b)

}

}

/client.go/

package main

import (

"bufio"

"fmt"

"net"

"time"

)

var quitSemaphore chan bool

func main() {

var tcpAddr *net.TCPAddr

tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:9999")

conn, _ := net.DialTCP("tcp", nil, tcpAddr)

defer conn.Close()

fmt.Println("connected!")

go onMessageRecived(conn)

b := []byte("time\n")

conn.Write(b)

}

func onMessageRecived(conn *net.TCPConn) {

reader := bufio.NewReader(conn)

for {

msg, err := reader.ReadString('\n')

fmt.Println(msg)

if err != nil {

quitSemaphore

break

}

time.Sleep(time.Second)

b := []byte(msg)

conn.Write(b)

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

华拓科技网还为您提供以下相关内容希望对您有帮助:

使用Go 语言通过 TCP 传输 gob 数据

一、核心步骤服务器端:监听TCP端口,接受客户端连接,使用gob.Decoder解码数据。客户端:连接服务器,使用gob.Encoder编码数据并发送。并发处理:服务器端通过goroutine并发处理多个连接。资源管理:使用defer确保连接和关闭,避免资源泄漏。二、完整代码示例1. 服务器端实现package

使用Go语言通过TCP发送Gob数据

使用Go语言通过TCP发送Gob数据的完整实现包括服务端和客户端代码,需遵循结构体定义、指针解码、资源释放等关键注意事项。以下是具体实现步骤和代码示例:一、核心实现步骤定义共享结构体客户端和服务端需使用相同的结构体定义(建议单独封装为包或直接复制定义):type DataPacket struct { ID int ...

TCP 监听却能接收 HTTP 请求:Golang 服务器如何做到?

Golang编写的TCP监听服务器能接收HTTP请求,是因为HTTP协议依赖TCP作为传输层协议,TCP监听本质上是为上层协议(包括HTTP)提供数据传输通道。以下是具体解释:协议分层与依赖关系在OSI模型中,HTTP(应用层)通过TCP(传输层)实现可靠的数据传输。当客户端发起HTTP请求时,会先与服务器建立TCP连接(三次握手...

GolangTCP连接断开怎么处理?Golang网络编程问题排查

= nil { log.Printf("心跳发送失败: %v", err) conn.Close() return } }}服务器端处理检测到Read错误时关闭连接并清理客户端状态。可结合心跳检测主动断开无效连接。二、Golang TCP连接异常诊断工具网络抓包工具 tcpdump/Wireshark:分析TCP握手(SYN/SYN-ACK/ACK)和挥...

使用Go 语言模拟 TCP 连接进行网络代码测试

在 Go 语言中,可使用 net.Pipe() 函数模拟 TCP 连接进行网络代码测试,该方法通过创建内存中的全双工连接,避免依赖真实网络环境,提升测试效率并简化异常模拟。核心原理net.Pipe() 返回一对相互连接的 net.Conn 实例(r 和 w),形成同步、内存中的全双工通道:同步性:Write() 会阻塞直到数据被 ...

Go语言RPC实践:构建分布式消息与远程调用服务

Go语言通过net/rpc包可高效实现分布式消息与远程调用服务,其核心机制包括服务注册、方法定义、参数封装及同步/异步调用,适用于构建轻量级、可扩展的分布式应用。 以下从服务端实现、客户端调用、关键机制及注意事项四个方面展开说明:一、服务端实现步骤定义服务结构体与方法 服务结构体需包含可导出的方法(...

Golang实现UDP通信怎么做 对比TCP与UDP编程差异

一、Golang实现UDP通信示例1. UDP服务端实现package mainimport ( "fmt" "net")func main() { // 绑定地址和端口 addr, err := net.ResolveUDPAddr("udp", ":8080") if err != nil { panic(err) } // 监听UDP端口...

Golang如何使用RPC进行跨服务通信

服务端实现生成的接口,客户端通过生成的存根调用。适用场景:内部服务均为Go且规模较小时,net/rpc足够轻量。跨语言或复杂需求时,优先选择gRPC。六、完整示例代码服务端 package mainimport ( "log" "net" "net/rpc")type Args struct{ A, B int }type...

GO语言 处理服务端MQTT请求性能

答案:GO语言在处理服务端MQTT请求时表现出色,特别是在高并发场景下。相较于PHP及其MQTT扩展,GO语言凭借其原生并发支持和高效的内存管理机制,能够显著提升系统的稳定性和性能。一、GO语言处理MQTT请求的优势 原生并发支持:GO语言内置的goroutine和channel机制,使得处理并发任务变得简单且高效。在处理MQTT...

go tcp 怎么得知服务器发送fin

客户端连接,然后接收数据,服务端发送fin给客户端。python作为客户端接收到协议栈中的fin,应用层sock.recv调用返回的EOF值为空字符串。java作为客户端的通过socket的inputStream.read读取到的EOF值为-1。go作为客户端的实现应该也差不多,就看go语言层面中对EOF映射成哪个值啦!

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务