


Rangkaian : Pelayan dan Klien TCP/IP Pertama anda dalam Go
? Apa yang Akan Kita Pelajari
Dalam tutorial ini, kami akan mengemiskan pengaturcaraan rangkaian dengan membina pelayan dan klien TCP/IP yang ringkas namun mantap. Jika anda pernah tertanya-tanya bagaimana aplikasi berkomunikasi melalui rangkaian, panduan ini adalah untuk anda!
? Prasyarat
- Pengetahuan pengaturcaraan Asas Go
- Perasaan ingin tahu tentang rangkaian
- Penyunting teks
- Pergi dipasang pada komputer anda
- Modul Go ditambahkan (gunakan go mod init tcpIp)
? Memahami Komunikasi Rangkaian
Sebelum kita menyelami kod, mari kita pecahkan perkara yang berlaku apabila dua komputer bercakap:
-
TCP/IP: Anggap ia seperti panggilan telefon
- TCP (Protokol Kawalan Penghantaran): Memastikan mesej dihantar sepenuhnya dan teratur
- IP (Internet Protocol): Membantu menghalakan mesej ke peranti yang betul
-
Peranan Pelayan dan Pelanggan:
- Pelayan: Menunggu dan mendengar sambungan masuk
- Pelanggan: Memulakan hubungan dan menghantar permintaan
?️ Struktur Projek
tcp-chat-app/ ├── server/ │ └── server.go # Server-side logic ├── client/ │ └── client.go # Client-side logic └── main.go # Starts both server and client
? Langkah 1: Mencipta Pelayan
Memahami Kod Pelayan
package server import ( "log" "net" ) // StartServer: Our digital receptionist func StartServer() { // Choose a "phone number" (address) address := "localhost:8080" // Set up a "phone line" to listen for calls listener, err := net.Listen("tcp", address) if err != nil { log.Fatalf("Couldn't set up the phone line: %v", err) } defer listener.Close() log.Printf("Server is ready, waiting for connections on %s", address) // Forever wait for incoming "calls" for { // Accept a new connection conn, err := listener.Accept() if err != nil { log.Printf("Missed a call: %v", err) continue } // Handle each "caller" in a separate conversation go handleClient(conn) } }
Konsep Utama Diterangkan
- net.Listen(): Mencipta "soket" rangkaian untuk menerima sambungan
- listener.Accept(): Menunggu dan menerima sambungan masuk
- go handleClient(conn): Mengendalikan setiap klien dalam benang berasingan (goroutine)
? Mengendalikan Sambungan Pelanggan
func handleClient(conn net.Conn) { // Always clean up after the conversation defer conn.Close() log.Printf("New client connected: %s", conn.RemoteAddr()) // Prepare a message buffer buffer := make([]byte, 1024) // Keep the conversation going for { // Read message from client n, err := conn.Read(buffer) if err != nil { log.Printf("Connection error: %v", err) return } // Echo the message back message := string(buffer[:n]) log.Printf("Received: %s", message) conn.Write([]byte("Server says: " + message)) } }
Apa yang Berlaku Di Sini?
- penimbal: Storan sementara untuk mesej masuk
- conn.Read(): Menerima mesej daripada klien
- conn.Write(): Menghantar mesej kembali kepada klien
?️ Langkah 2: Mencipta Pelanggan
package client import ( "bufio" "fmt" "log" "net" "os" ) func StartClient() { // Dial the server (like making a phone call) conn, err := net.Dial("tcp", "localhost:8080") if err != nil { log.Printf("Could not connect to server: %v", err) return } defer conn.Close() fmt.Println("Connected to server. Start chatting!") // Read user input and send to server scanner := bufio.NewScanner(os.Stdin) for { fmt.Print("> ") if !scanner.Scan() { break } message := scanner.Text() if message == "exit" { break } // Send message to server conn.Write([]byte(message + "\n")) // Wait for server's response response := make([]byte, 1024) n, err := conn.Read(response) if err != nil { log.Printf("Error receiving response: %v", err) break } fmt.Println(string(response[:n])) } }
Mekanik Pelanggan
- net.Dial(): Sambung ke pelayan
- scanner.Scan(): Baca input papan kekunci pengguna
- conn.Write(): Hantar mesej ke pelayan
- conn.Read(): Terima jawapan pelayan
? Membawa Semuanya Bersama: main.go
package main import ( "time" "tcpIp/server" "tcpIp/client" ) func main() { // Start server in background go func() { server.StartServer() }() // Give server a moment to start time.Sleep(time.Second) // Launch client client.StartClient() }
?♂️ Menjalankan Apl Rangkaian Anda
go run main.go
? Apa yang Anda Pelajari
- Konsep komunikasi rangkaian asas
- Mencipta pelayan TCP dalam Go
- Menyambungkan pelanggan ke pelayan
- Mengendalikan sambungan rangkaian dengan selamat
- Pengurusan ralat asas dalam pengaturcaraan rangkaian
? Potensi Penambahbaikan
- Pengesahan
- Sokongan pelanggan berbilang
- Pengendalian ralat yang mantap
- Penyulitan
? Sumber
- Dokumentasi pakej Go's net
- Asas protokol TCP/IP
- Pengaturcaraan serentak dalam Go
Rujukan
Pentadbiran.(2023, 9 Ogos). Pelajari TCP/IP dengan Panduan Penukaran dan Penghalaan Percuma untuk Semua Orang. Cursin. https://cursin.net/en/learn-tcp-ip-with-the-free-switching-and-routing-guide-for-everyone/
Woodbeck, A. (2021). Pengaturcaraan Rangkaian dengan Go. Tiada Starch Press, Inc.
Selamat Berrangkaian! ??
Atas ialah kandungan terperinci Rangkaian : Pelayan dan Klien TCP/IP Pertama anda dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Pergi bahasa berfungsi dengan baik dalam membina sistem yang cekap dan berskala. Kelebihannya termasuk: 1. Prestasi Tinggi: Disusun ke dalam Kod Mesin, Kelajuan Berjalan Cepat; 2. Pengaturcaraan serentak: Memudahkan multitasking melalui goroutine dan saluran; 3. Kesederhanaan: sintaks ringkas, mengurangkan kos pembelajaran dan penyelenggaraan; 4. Cross-Platform: Menyokong kompilasi silang platform, penggunaan mudah.

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

Golang lebih baik daripada Python dari segi prestasi dan skalabiliti. 1) Ciri-ciri jenis kompilasi Golang dan model konkurensi yang cekap menjadikannya berfungsi dengan baik dalam senario konvensional yang tinggi. 2) Python, sebagai bahasa yang ditafsirkan, melaksanakan perlahan -lahan, tetapi dapat mengoptimumkan prestasi melalui alat seperti Cython.

Golang dan C masing-masing mempunyai kelebihan sendiri dalam pertandingan prestasi: 1) Golang sesuai untuk kesesuaian tinggi dan perkembangan pesat, dan 2) C menyediakan prestasi yang lebih tinggi dan kawalan halus. Pemilihan harus berdasarkan keperluan projek dan tumpukan teknologi pasukan.

Goimpactsdevelopmentpositivielythroughspeed, efficiency, andsimplicity.1) Speed: goCompilesquicklyandrunsefficiently, idealforlargeproject.2) Kecekapan: ITSComprehensivestandardlibraryraryrarexternaldependencies, enhingdevelyficiency.

C lebih sesuai untuk senario di mana kawalan langsung sumber perkakasan dan pengoptimuman prestasi tinggi diperlukan, sementara Golang lebih sesuai untuk senario di mana pembangunan pesat dan pemprosesan konkurensi tinggi diperlukan. Kelebihan 1.C terletak pada ciri-ciri perkakasan dan keupayaan pengoptimuman yang tinggi, yang sesuai untuk keperluan berprestasi tinggi seperti pembangunan permainan. 2. Kelebihan Golang terletak pada sintaks ringkas dan sokongan konvensional semulajadi, yang sesuai untuk pembangunan perkhidmatan konvensional yang tinggi.

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.
