Erstellen Sie einen TCP-client in golang
Hallo, ich bin versucht zu lernen, einige socket-Programmierung in golang, ich bin zusammen mit diesem tutorial
http://synflood.at/tmp/golang-slides/mrmcd2012.html#1
Hier das Endergebnis des Tutorials auf einer Seite.
https://github.com/akrennmair/telnet-chat/blob/master/03_chat/chat.go
Ich bin verwirrt, wie zu schreiben der client-Seite mit diesem Programm erstelle ich eine Verbindung und wählen Sie in den gleichen port/ip wie der server läuft, aber von da aus weiß ich nicht. Ich habe read() und write () - Funktionen für die neu erstellte Verbindung, aber keine Ahnung, wo begrenzen Sie den lese-oder nichts. Angesichts der text-Eingabe wird vorgeführt in den server ich Stelle mir vor ich würde nur tun müssen, ein Lesen von einer Art?
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:6000")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for {
fmt.Println(bufio.NewReader(conn).ReadString([]byte("\n")))
}
}
- TCP ist ein peer-to-peer-Protokoll, und es müssen keine clients oder Server. Die client/server-Konzept ist ein Konzept Anwendung, das hat nichts mit TCP.
Du musst angemeldet sein, um einen Kommentar abzugeben.
bufio.NewReader
sollte nur einmal verwendet werden, in Ihrem Fall, kurz vor derfor
. Zum Beispielconnbuf := bufio.NewReader(conn)
. Dann können Sie ReadString auf connbuf, dass gibt den string zurück, und vielleicht ein Fehler. Zum Beispiel:Ich Kontrolle
len
underr
weilReadString
können die Daten zurückgeben und einen Fehler (Verbindungsfehler, connection reset, etc.) so müssen Sie überprüfen.bufc.ReadLine()
es mir nicht erlaubt, auf nichts eingeben. Das ist die Ausgabe die ich erhalteWelcome to chat room, What is your nickname?:
aber es hängt hier nicht erlaubt-Eingang.io.Copy(os.Stdout, conn)
und andere für die andere Richtung mitio.Copy(conn, os.Stdin)
. Dies ist vollkommen asynchron, aber es sollte genug sein, um loszulegen.Hier ist eine einfache Lösung, wenn Sie Lesen wollen, werden alle empfangenen Daten.