Browse Source

one simple connection client-server sending strings, works

master
arnaucode 7 years ago
parent
commit
aa94b72ec1
2 changed files with 114 additions and 0 deletions
  1. +59
    -0
      client/main.go
  2. +55
    -0
      server/main.go

+ 59
- 0
client/main.go

@ -0,0 +1,59 @@
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() { //client https://systembash.com/a-simple-go-tcp-server-and-tcp-client/
// connect to this socket
conn, _ := net.Dial("tcp", "127.0.0.1:3333")
hostname, err := os.Hostname()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("connecting to server as hostname:", hostname)
ip := getIp()
fmt.Println("local ip:", ip)
// send to socket
fmt.Fprintf(conn, hostname+", ip: "+ip.String()+"\n")
for {
message, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println(err)
fmt.Println("server disconnected")
os.Exit(1)
}
fmt.Print("Command from server: " + message)
}
}
func getIp() net.IP {
var ip net.IP
ifaces, err := net.Interfaces()
if err != nil {
fmt.Println(err)
}
for _, i := range ifaces {
addrs, err := i.Addrs()
if err != nil {
fmt.Println(err)
}
for _, addr := range addrs {
switch v := addr.(type) {
case *net.IPNet:
ip = v.IP
case *net.IPAddr:
ip = v.IP
}
// process IP address
}
}
return ip
}

+ 55
- 0
server/main.go

@ -0,0 +1,55 @@
package main
import (
"bufio"
"fmt"
"net"
"os"
)
const (
CONN_HOST = "localhost"
CONN_PORT = "3333"
CONN_TYPE = "tcp"
)
func main() { //server
fmt.Println("Launching server...")
// listen on all interfaces
ln, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
// Close the listener when the application closes.
defer ln.Close()
defer fmt.Println("ended")
fmt.Println("Listening on " + CONN_HOST + ":" + CONN_PORT)
// accept connection on port
c, err := ln.Accept()
if err != nil {
fmt.Println("Error accepting: ", err.Error())
os.Exit(1)
}
// will listen for message to process ending in newline (\n)
message, _ := bufio.NewReader(c).ReadString('\n')
// output message received
fmt.Print("client connected:", string(message), "\n")
for {
/*// will listen for message to process ending in newline (\n)
message, _ := bufio.NewReader(c).ReadString('\n')
// output message received
fmt.Print("client connected:", string(message), "\n")*/
newcommand := bufio.NewReader(os.Stdin)
fmt.Print("command to send to the clients: ")
text, _ := newcommand.ReadString('\n')
// send new string back to client
c.Write([]byte(text + "\n"))
}
}

Loading…
Cancel
Save