Commit b8c445c8 authored by Boris Mühmer's avatar Boris Mühmer
Browse files

added very basic TCP based client-server example

parent e9490857
Loading
Loading
Loading
Loading

client/client.go

0 → 100644
+46 −0
Original line number Diff line number Diff line
package client

import (
	"fmt"
	"net"
	"os"

	"repositories.muehmer.net/bsmrgo/sandbox/server"
	"repositories.muehmer.net/bsmrgo/sandbox/utilities"
)

type Client struct {
	Options *Options
}

type Options struct {
	Addr string
	Port string
}

func New(options *Options) *Client {
	return &Client{
		Options: options,
	}
}

func (c *Client) Start() error {
	svc := utilities.AddrPort("127.0.0.1", server.DefaultPort)
	srv, err := net.Dial("tcp", svc)
	if err != nil {
		return err
	}

	if _, err := srv.Write([]byte("Hello, World!")); err != nil {
		return err
	}

	_, bytes, err := utilities.ReadFull(srv)
	if err != nil {
		return err
	}

	fmt.Fprintf(os.Stderr, "result: %q\n", string(bytes))

	return nil
}

client/client_test.go

0 → 100644
+7 −0
Original line number Diff line number Diff line
package client

import "testing"

func TestSkip(t *testing.T) {
	t.Skip("not implemented")
}

cmd/client/main.go

0 → 100644
+17 −0
Original line number Diff line number Diff line
package main

import (
	"fmt"
	"os"

	"repositories.muehmer.net/bsmrgo/sandbox/client"
)

func main() {
	fmt.Println("sandbox - client")
	co := &client.Options{}
	cl := client.New(co)
	if err := cl.Start(); err != nil {
		fmt.Fprintf(os.Stderr, "Error: client.Start() failed with: %s\n", err)
	}
}

cmd/server/main.go

0 → 100644
+17 −0
Original line number Diff line number Diff line
package main

import (
	"fmt"
	"os"

	"repositories.muehmer.net/bsmrgo/sandbox/server"
)

func main() {
	fmt.Println("sandbox - server")
	so := &server.Options{}
	sr := server.New(so)
	if err := sr.Start(); err != nil {
		fmt.Fprintf(os.Stderr, "Error: server.Start() failed with: %s\n", err)
	}
}

server/server.go

0 → 100644
+63 −0
Original line number Diff line number Diff line
package server

import (
	"net"

	"repositories.muehmer.net/bsmrgo/sandbox/utilities"
)

type Server struct {
	Options *Options
}

type Options struct {
	Addr string
	Port string
}

const (
	DefaultAddr = "0.0.0.0"
	DefaultPort = "5431"
)

func New(options *Options) *Server {
	return &Server{
		Options: options,
	}
}

func (s *Server) Start() error {
	ap := utilities.AddrPort(DefaultAddr, DefaultPort)
	l, err := net.Listen("tcp", ap)
	if err != nil {
		return err
	}

	for {
		c, err := l.Accept()
		if err != nil {
			continue
		}

		go s.handleClient(c)
	}
}

func (s *Server) handleClient(c net.Conn) {
	defer c.Close()

	var buf [512]byte
	for {
		n, err := c.Read(buf[0:])
		if err != nil {
			return
		}
		if _, err := c.Write(buf[0:n]); err != nil {
			return
		}
	}
}

func (s *Server) Stop() error {
	return nil
}
Loading