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) }