92 lines
1.6 KiB
Plaintext
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)
|
||
|
}
|