回答
這裏是一個客戶端和服務器,處理冗長的恐慌錯誤。它們有一些限制:
- 服務器一次只處理一個客戶端連接。你可以通過使用goroutines來解決這個問題。
- 數據包總是包含100個字節的有效載荷。你可以通過在一個地方放一個長度的數據包來解決這個問題,而不是使用整個結構體的編碼/二進制數,但是我保持簡單。
這裏的服務器:
package main
import (
"encoding/binary"
"fmt"
"net"
)
type packet struct {
// Field names must be capitalized for encoding/binary.
// It's also important to use explicitly sized types.
// int32 rather than int, etc.
Type int32
Id int32
// This must be an array rather than a slice.
Data [100]byte
}
func main() {
// set up a listener on port 2000
l, err := net.Listen("tcp", ":2000")
if err != nil {
panic(err.String())
}
for {
// start listening for a connection
conn, err := l.Accept()
if err != nil {
panic(err.String())
}
handleClient(conn)
}
}
func handleClient(conn net.Conn) {
defer conn.Close()
// a client has connected; now wait for a packet
var msg packet
binary.Read(conn, binary.BigEndian, &msg)
fmt.Printf("Received a packet: %s\n", msg.Data)
// send the response
response := packet{Type: 1, Id: 1}
copy(response.Data[:], "Hello, client")
binary.Write(conn, binary.BigEndian, &response)
}
這裏的客戶端。它發送一個數據包類型爲0,ID爲0,內容爲「Hello,server」的數據包。然後等待迴應,打印出來並退出。
package main
import (
"encoding/binary"
"fmt"
"net"
)
type packet struct {
Type int32
Id int32
Data [100]byte
}
func main() {
// connect to localhost on port 2000
conn, err := net.Dial("tcp", ":2000")
if err != nil {
panic(err.String())
}
defer conn.Close()
// send a packet
msg := packet{}
copy(msg.Data[:], "Hello, server")
err = binary.Write(conn, binary.BigEndian, &msg)
if err != nil {
panic(err.String())
}
// receive the response
var response packet
err = binary.Read(conn, binary.BigEndian, &response)
if err != nil {
panic(err.String())
}
fmt.Printf("Response: %s\n", response.Data)
}
你可以在結構中使用編碼/二進制和[]字節嗎? –
panic:binary.Write:無效類型main.packet –
我以爲你可以,但顯然你不能。無論如何,它都會有問題。對不起,我必須稍後再糾正。 –
查看Jan Newmarch的"Network programming with Go"。
- 1. 如何在神經網絡中使用Softmax激活功能
- 2. 在網絡上使用PhoneGap Media()功能
- 3. 如何使網絡爬蟲更有效?
- 4. F#+網絡,使用System.Math.Floor功能
- 5. 使用Django的社交網絡功能
- 6. 使用IONIC在IOS上沒有網絡連接功能問題
- 7. 如何監視網絡接口(go-lang)
- 8. 如何使此PHP功能更有效
- 9. 如何在功能中使用功能
- 10. 通過網絡有效使用gvim
- 11. 我如何在clojure網絡應用程序中有條件地加載功能
- 12. 如何適合使用PyBrain網絡的功能?
- 13. Go有哪些網絡編程選項?
- 14. 如何在Yii中使用社交網絡實現註銷功能
- 15. 如何在MATLAB中使用自定義神經網絡功能圖像
- 16. VM:*網絡類型'public_netwrok'無效。請使用有效的網絡類型
- 17. 當使用PhoneGap時,我有一個完整的網絡功能?
- 18. 如何使NAME功能在Excel 2010的VLOOKUP公式中有效
- 19. 量角器:啓用網絡啓用網絡調節功能
- 20. Go-CPU /內存/網絡
- 21. 網絡爬蟲的功能
- 22. Moodle網絡服務功能
- 23. Vis.js網絡準備功能?
- 24. 功能性網絡聊天
- 25. Google「網絡燈」功能
- 26. 神經網絡功能
- 27. 如何從其他網絡資源(html)調用網絡資源(html)功能?
- 28. 有效地在網絡環境中使用MongoDB
- 29. 如何在網絡中使用TortoiseSVN?
- 30. Go模板功能
http://senseis.xmp.net/?PagesForBeginners(抱歉...) – MatthieuW
我不認爲這是重要的。 :P –