Skip to content

Instantly share code, notes, and snippets.

@jordanorelli
Created July 19, 2012 23:34
Show Gist options
  • Save jordanorelli/3147646 to your computer and use it in GitHub Desktop.
Save jordanorelli/3147646 to your computer and use it in GitHub Desktop.
tcp echo server/client pair in Go
package main
import (
"bufio"
"fmt"
"io"
"net"
"os"
)
var port = "0.0.0.0:9001"
func main() {
conn, err := net.Dial("tcp", port)
if err != nil {
fmt.Println("ERROR", err)
os.Exit(1)
}
userInput := bufio.NewReader(os.Stdin)
response := bufio.NewReader(conn)
for {
userLine, err := userInput.ReadBytes(byte('\n'))
switch err {
case nil:
conn.Write(userLine)
case io.EOF:
os.Exit(0)
default:
fmt.Println("ERROR", err)
os.Exit(1)
}
serverLine, err := response.ReadBytes(byte('\n'))
switch err {
case nil:
fmt.Print(string(serverLine))
case io.EOF:
os.Exit(0)
default:
fmt.Println("ERROR", err)
os.Exit(2)
}
}
}
package main
import (
"bufio"
"fmt"
"io"
"net"
"os"
)
var port = "0.0.0.0:9001"
func echo(conn net.Conn) {
r := bufio.NewReader(conn)
for {
line, err := r.ReadBytes(byte('\n'))
switch err {
case nil:
break
case io.EOF:
default:
fmt.Println("ERROR", err)
}
conn.Write(line)
}
}
func main() {
l, err := net.Listen("tcp", port)
if err != nil {
fmt.Println("ERROR", err)
os.Exit(1)
}
for {
conn, err := l.Accept()
if err != nil {
fmt.Println("ERROR", err)
continue
}
go echo(conn)
}
}
@MRX-72
Copy link

MRX-72 commented Nov 1, 2022

Doesn't work

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment