Skip to content

Instantly share code, notes, and snippets.

@miguelmota
Last active April 12, 2024 23:13
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save miguelmota/301340db93de42b537df5588c1380863 to your computer and use it in GitHub Desktop.
Save miguelmota/301340db93de42b537df5588c1380863 to your computer and use it in GitHub Desktop.
Golang TCP server example
package server
import (
"bufio"
"fmt"
"log"
"net"
)
// Server ...
type Server struct {
host string
port string
}
// Client ...
type Client struct {
conn net.Conn
}
// Config ...
type Config struct {
Host string
Port string
}
// New ...
func New(config *Config) *Server {
return &Server{
host: config.Host,
port: config.Port,
}
}
// Run ...
func (server *Server) Run() {
listener, err := net.Listen("tcp", fmt.Sprintf("%s:%s", server.host, server.port))
if err != nil {
log.Fatal(err)
}
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal(err)
}
client := &Client{
conn: conn,
}
go client.handleRequest()
}
}
func (client *Client) handleRequest() {
reader := bufio.NewReader(client.conn)
for {
message, err := reader.ReadString('\n')
if err != nil {
client.conn.Close()
return
}
fmt.Printf("Message incoming: %s", string(message))
client.conn.Write([]byte("Message received.\n"))
}
}
package server
import (
"testing"
)
func TestServer(t *testing.T) {
server := New(&Config{
Host: "localhost",
Port: "3333",
})
server.Run()
}
// echo "hello world" | nc localhost 3333
@sinalalebakhsh
Copy link

Thanks for this

@MrJSdev
Copy link

MrJSdev commented Aug 28, 2023

thank you man 🚀

@aeon3k
Copy link

aeon3k commented Nov 12, 2023

thanks bro

@jonathan-rosa
Copy link

Thank you bro

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