CoSync/lab/TcpServExample.gone
2025-01-01 22:18:08 +01:00

92 lines
1.6 KiB
Plaintext

package lab
import (
"bufio"
"fmt"
"io"
"net"
"os"
)
func ExampleMain() {
// Choose either server or client mode
if len(os.Args) > 1 && os.Args[1] == "server" {
runServer()
} else {
runClient()
}
}
func runServer() {
listener, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
defer listener.Close()
fmt.Println("Server listening on :8080")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err)
continue
}
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
reader := bufio.NewReader(conn)
for {
message, err := reader.ReadString('\n')
if err != nil {
if err == io.EOF {
fmt.Println("Client disconnected")
return
}
fmt.Println("Error reading from client:", err)
return
}
fmt.Println("Received from client:", message)
// Process the message (e.g., send a response)
// ...
// Send a response to the client
_, err = conn.Write([]byte("Server received your message\n"))
if err != nil {
fmt.Println("Error writing to client:", err)
return
}
}
}
func runClient() {
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
panic(err)
}
defer conn.Close()
fmt.Println("Connected to server")
// Send a message to the server
_, err = conn.Write([]byte("Hello from the client!\n"))
if err != nil {
fmt.Println("Error writing to server:", err)
return
}
// Read the server's response
reader := bufio.NewReader(conn)
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Error reading from server:", err)
return
}
fmt.Println("Received from server:", message)
}