2017-06-26 6 views
1

Ich habe einen TCP-Server und TCP-Client in Go-Sprache geschrieben gefunden. Das Problem ist, dass der Server nicht mehrere Clients verwalten kann und ich weiß nicht, wie ich das erlauben soll.Handle mehrere Netzwerk-Clients

Server:

package main 

import "net" 
import "fmt" 
import "bufio" 
import "strings" // only needed below for sample processing 

func main() { 

    fmt.Println("Launching server...") 

    // listen on all interfaces 
    ln, _ := net.Listen("tcp", ":8081") 

    // accept connection on port 
    conn, _ := ln.Accept() 

    // run loop forever (or until ctrl-c) 
    for { 
    // will listen for message to process ending in newline (\n) 
    message, _ := bufio.NewReader(conn).ReadString('\n') 
    // output message received 
    fmt.Print("Message Received:", string(message)) 
    // sample process for string received 
    newmessage := strings.ToUpper(message) 
    // send new string back to client 
    conn.Write([]byte(newmessage + "\n")) 
    } 
} 

Auftraggeber:

package main 

import "net" 
import "fmt" 
import "bufio" 
import "os" 

func main() { 

    // connect to this socket 
    conn, _ := net.Dial("tcp", "127.0.0.1:8081") 
    for { 
    // read in input from stdin 
    reader := bufio.NewReader(os.Stdin) 
    fmt.Print("Text to send: ") 
    text, _ := reader.ReadString('\n') 
    // send to socket 
    fmt.Fprintf(conn, text + "\n") 
    // listen for reply 
    message, _ := bufio.NewReader(conn).ReadString('\n') 
    fmt.Print("Message from server: "+message) 
    } 
} 

Kann mir jemand helfen?

Soruce: https://systembash.com/a-simple-go-tcp-server-and-tcp-client/

Antwort

2

Sie haben ein paar Probleme. Zuerst möchten Sie Ihre eingehenden Verbindungen akzeptieren innerhalb Ihre for-Schleife. Dann sind Sie wahrscheinlich ein goroutine zum Laichen aus gehen wollen, dass die Anfragen in den kommenden .:

for { 
    // Listen for an incoming connection. 
    conn, err := l.Accept() 
    if err != nil { 
     log.Println("Error accepting: ", err.Error()) 
     continue 
    } 

    // Handle connections in a new goroutine. 
    go myHandler(conn) 
} 

Ressourcen zu handhaben:
https://tour.golang.org/concurrency

GoPlay:
https://play.golang.org/p/7EovqNWJIx