Socket #
Penggunaan Socket di Golang #
Socket programming di Golang digunakan untuk komunikasi antara aplikasi melalui jaringan. Golang menyediakan paket net
yang mendukung pengembangan aplikasi client-server menggunakan TCP dan UDP.
Berikut ini adalah penjelasan tentang penggunaan socket di Golang beserta contoh implementasi client dan server menggunakan TCP.
Contoh TCP Server #
Server TCP menerima koneksi dari client, membaca data yang dikirim oleh client, dan mengirim balasan kembali ke client.
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func handleConnection(conn net.Conn) {
defer conn.Close()
for {
message, _ := bufio.NewReader(conn).ReadString('\n')
fmt.Print("Message received: ", string(message))
newMessage := "Message received: " + message
conn.Write([]byte(newMessage + "\n"))
}
}
func main() {
ln, err := net.Listen("tcp", ":8081")
if err != nil {
fmt.Println("Error starting server:", err)
os.Exit(1)
}
defer ln.Close()
fmt.Println("TCP server listening on port 8081")
for {
conn, err := ln.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err)
continue
}
go handleConnection(conn)
}
}
Dalam contoh ini:
- Server mendengarkan pada port
8081
. - Setiap koneksi yang diterima akan ditangani oleh fungsi
handleConnection
. handleConnection
membaca pesan dari client dan mengirim balasan kembali.
Contoh TCP Client #
Client TCP menghubungi server, mengirim pesan, dan menerima balasan dari server.
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8081")
if err != nil {
fmt.Println("Error connecting to server:", err)
os.Exit(1)
}
defer conn.Close()
for {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter message: ")
text, _ := reader.ReadString('\n')
fmt.Fprintf(conn, text+"\n")
message, _ := bufio.NewReader(conn).ReadString('\n')
fmt.Print("Message from server: " + message)
}
}
Dalam contoh ini:
- Client terhubung ke server pada
127.0.0.1:8081
. - Client mengirim pesan yang dibaca dari input pengguna dan menunggu balasan dari server.
Penjelasan Lebih Lanjut #
Menggunakan net.Listen
#
Fungsi net.Listen
digunakan untuk membuat listener jaringan pada alamat tertentu. Listener ini menerima koneksi masuk.
ln, err := net.Listen("tcp", ":8081")
if err != nil {
log.Fatal(err)
}
defer ln.Close()
Menggunakan ln.Accept
#
Metode ln.Accept
digunakan untuk menerima koneksi masuk. Ini mengembalikan koneksi (interface net.Conn
) yang dapat digunakan untuk komunikasi dengan client.
conn, err := ln.Accept()
if err != nil {
log.Fatal(err)
}
Menggunakan net.Dial
#
Fungsi net.Dial
digunakan oleh client untuk terhubung ke server. Ini mengembalikan koneksi (interface net.Conn
) yang dapat digunakan untuk komunikasi dengan server.
conn, err := net.Dial("tcp", "127.0.0.1:8081")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
Membaca dan Menulis Data #
Untuk membaca dan menulis data melalui koneksi, Anda dapat menggunakan metode seperti bufio.NewReader
dan fmt.Fprintf
.
// Membaca data dari koneksi
message, _ := bufio.NewReader(conn).ReadString('\n')
// Menulis data ke koneksi
fmt.Fprintf(conn, text+"\n")
Kesimpulan #
Socket programming di Golang memungkinkan komunikasi antar aplikasi melalui jaringan. Dengan menggunakan paket net
, Anda dapat mengembangkan aplikasi client-server yang mendukung TCP. Contoh di atas menunjukkan implementasi dasar TCP server dan client yang berkomunikasi melalui socket. Pendekatan ini dapat diperluas dan dimodifikasi sesuai kebutuhan aplikasi jaringan Anda.