[ Cmii ] [ Octopus ] - add tcp portforwarding part
This commit is contained in:
79
port_forwarding/tcp_learn/socket_learn.go
Normal file
79
port_forwarding/tcp_learn/socket_learn.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package tcp_learn
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
func handleConnection(conn net.Conn) {
|
||||
defer conn.Close()
|
||||
|
||||
buf := make([]byte, 1024)
|
||||
for {
|
||||
n, err := conn.Read(buf)
|
||||
if err != nil {
|
||||
fmt.Println("Error reading:", err)
|
||||
break
|
||||
}
|
||||
if n > 0 {
|
||||
fmt.Printf("Received data from %s: %s\n", conn.RemoteAddr(), string(buf[:n]))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TcpServer() {
|
||||
addr, err := net.ResolveTCPAddr("tcp", "localhost:8080")
|
||||
if err != nil {
|
||||
|
||||
log.Printf("Error accepting connection: %v", err)
|
||||
}
|
||||
listener, err := net.ListenTCP("tcp", addr)
|
||||
if err != nil {
|
||||
log.Fatalf("Error creating listener: %v", err)
|
||||
}
|
||||
defer listener.Close()
|
||||
listener.SetDeadline(time.Now().Add(2 * time.Minute))
|
||||
|
||||
for {
|
||||
conn, err := listener.Accept()
|
||||
if err != nil {
|
||||
log.Printf("Error accepting connection: %v", err)
|
||||
return
|
||||
}
|
||||
go handleConnection(conn)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TcpClient() chan bool {
|
||||
|
||||
exit := make(chan bool, 1)
|
||||
tick := time.Tick(time.Second)
|
||||
timeOut := time.After(time.Minute)
|
||||
|
||||
conn, err := net.Dial("tcp", "localhost:8080")
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("Error creating listener: %v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-timeOut:
|
||||
fmt.Println("timeout exit!")
|
||||
exit <- true
|
||||
return exit
|
||||
case <-tick:
|
||||
|
||||
_, err := conn.Write([]byte("Hello from tcp client !"))
|
||||
if err != nil {
|
||||
log.Fatalf("Error write tcp : %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return exit
|
||||
}
|
||||
23
port_forwarding/tcp_learn/socket_learn_test.go
Normal file
23
port_forwarding/tcp_learn/socket_learn_test.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package tcp_learn
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestTcpServer(t *testing.T) {
|
||||
|
||||
var exit chan bool
|
||||
|
||||
go func() {
|
||||
TcpServer()
|
||||
}()
|
||||
|
||||
go func() {
|
||||
time.Sleep(time.Second)
|
||||
|
||||
exit = TcpClient()
|
||||
}()
|
||||
|
||||
<-exit
|
||||
}
|
||||
Reference in New Issue
Block a user