服务端:
package main
import (
"fmt"
"log"
"net"
"time"
)
func echo(conn *net.TCPConn) {
tick := time.Tick(5 * time.Second)
for now := range tick {
n, err := conn.Write([]byte(now.String() + ":Hello from server,Good luck to you!"))
if err != nil {
log.Println(err)
conn.Close()
return
}
fmt.Printf("send %d bytes to %s/n", n, conn.RemoteAddr())
// _, err = conn.Write([]byte("Hello from server,Good luck to you! "))
// if err != nil {
// fmt.Println("Error writing:", err.Error())
// return
// }
}
}
func main() {
address := net.TCPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: 8000,
}
listener, err := net.ListenTCP("tcp4", &address)
if err != nil {
log.Fatal(err)
}
for {
conn, err := listener.AcceptTCP()
if err != nil {
log.Fatal(err)
}
fmt.Println("远程地址:", conn.RemoteAddr())
go echo(conn)
}
}
客户端:
package main
import (
"fmt"
"net"
"os"
)
func main() {
// if len(os.Args) != 2 {
// fmt.Fprintf(os.Stderr, "用法:%s host:port ", os.Args[0])
// }
// service := os.Args[1]
service := "127.0.0.1:8000"
tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
checkError(err)
conn, err := net.DialTCP("tcp", nil, tcpAddr)
checkError(err)
_, err = conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
checkError(err)
buffer := make([]byte, 512)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err.Error())
os.Exit(1)
}
fmt.Printf("Received response: %s\n", string(buffer[:n]))
// a := string(buffer[:n])
// fmt.Printf(a)
fmt.Printf("Received ok")
// result, err := io.ReadAll(conn)
// checkError(err)
// fmt.Println(string(result))
// os.Exit(0)
}
func checkError(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "错误:%s", err.Error())
os.Exit(1)
}
}
服务端2:
package main
import (
"fmt"
"net"
)
func main() {
listener, err := net.Listen("tcp", "localhost:50000")
if err != nil {
fmt.Println("Error listening:", err.Error())
return
}
defer listener.Close()
fmt.Println("Listening on localhost:50000")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting:", err.Error())
continue
}
go handleRequest(conn)
}
}
func handleRequest(conn net.Conn) {
defer conn.Close()
var buffer [512]byte
n, err := conn.Read(buffer[0:])
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
fmt.Println("Received message:", string(buffer[0:n]))
}
客户端2:
package main
import (
"fmt"
"net"
"os"
)
func main() {
conn, err := net.Dial("tcp", "localhost:50000")
if err != nil {
fmt.Println("Error dialing:", err.Error())
os.Exit(1)
}
defer conn.Close()
_, err = conn.Write([]byte("Hello, server!\n"))
if err != nil {
fmt.Println("Error writing to server:", err.Error())
}
}