подключение к серверу с клиентом ведет себя иначе, чем telnet - PullRequest
0 голосов
/ 10 ноября 2019

Я хочу написать простой клиент для этого сервера Go . когда я подключаюсь к серверу из CMD через telnet, он работает нормально, т.е. когда клиент подключается, сервер запрашивает имя пользователя, но когда я пытаюсь подключиться со следующего клиента:

package main

import (
    "bufio"
    "fmt"
    "net"
    "os"
)

func main() {

    // connect to this socket
    conn, _ := net.Dial("tcp", "127.0.0.1:8181")
    for {
        // read in input from stdin
        reader := bufio.NewReader(os.Stdin)
        fmt.Print("Write to send: ")
        text, _ := reader.ReadString('\n')

        // send to socket
        fmt.Fprintf(conn, text)
        // listen for reply
        message, _ := bufio.NewReader(conn).ReadString('\n')
        fmt.Print("Message from server: " + message)
    }
}

Сервер всегда остаетсяпозади в одном сообщении. Например, после запуска сервера и попытки подключения с клиента:

Вывод сервера:

D:\>go run server.go
2019/11/10 22:07:19 listening on:  127.0.0.1:8181
2019/11/10 22:07:24 createclient: remote connection from: 127.0.0.1:55565
2019/11/10 22:07:29 new client created: 127.0.0.1:55565 devy

Вывод клиента:

D:\>go run client.go
Write to send: devy
Message from server: Please Enter Name: ---------------------------
Write to send:

Но я хочу, чтобысообщение «Пожалуйста, введите имя: ---------------------------» с сервера будет отображаться первым при входе клиента в систему

1 Ответ

0 голосов
/ 10 ноября 2019

Сначала вы читаете со стандартного ввода, а затем отправляете это на сервер. Если сервер отправляет строку «Пожалуйста, введите имя», вы должны сначала прочитать с сервера, а затем прочитать из стандартного ввода и записать то, что вы прочитали на сервер.

for {
        message, _ := bufio.NewReader(conn).ReadString('\n')
        fmt.Print("Message from server: " + message)
        // read in input from stdin
        reader := bufio.NewReader(os.Stdin)
        fmt.Print("Write to send: ")
        text, _ := reader.ReadString('\n')
        // send to socket
        fmt.Fprintf(conn, text)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...