我有 TCP 服务器和客户端,简单 TCP 服务器将只接收传入数据并打印它,客户端将不断创建套接字连接并在循环中将数据发送到 TCP 服务器。
我得到的信息是,如果 TCP 连接正确关闭,这个过程应该继续进行而不会出现任何崩溃。
但是在从客户端接收到服务器的一些数据后,客户端因错误而崩溃
total times data send: 16373
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x10d7594]
goroutine 1 [running]:
main.sendData()
/Users/apple/Desktop/Personal/umbrellaserver/src/tests/clinet.go:178
+0xb4
main.main()
/Users/apple/Desktop/Personal/umbrellaserver/src/tests/clinet.go:170
+0x2a
exit status 2
服务器.go
package main
import (
"bufio"
"fmt"
"net"
"sync"
)
var wg sync.WaitGroup
var count = 0
var timeX string = ""
var connQueue = make(chan string)
func main() {
tcpListner := startTCPConnection()
incomingTCPListener(tcpListner)
}
//startTCPConnection
func startTCPConnection() net.Listener {
tcpListner, tcpConnectonError := net.Listen("tcp", "localhost:3000")
if tcpConnectonError != nil {
print(tcpConnectonError)
return
}
return tcpListner
}
//incomingTCPListener
func incomingTCPListener(tcpListner net.Listener) {
for {
incomingConnection, incomingConnectionError := tcpListner.Accept()
if incomingConnectionError != nil {
print(incomingConnectionError)
return
}
wg.Add(1)
go processIncomingRequest(incomingConnection)
wg.Wait()
}
}
//processIncomingRequest
func processIncomingRequest(connection net.Conn) {
defer connection.Close()
var scanner = bufio.NewScanner(connection)
var blob = ""
for scanner.Scan() {
fmt.Println("sadd")
text := scanner.Text()
blob += text
}
print(blob)
count++
fmt.Println("totalCount", count)
wg.Done()
}
有什么办法可以避免这种崩溃,让它一直运行下去吗? 我是 Go 的新手,所以如果我犯了任何愚蠢的错误,我很抱歉。
鸿蒙传说
慕姐4208626
暮色呼如
相关分类