Мне нужно написать код на стороне клиента, который получает сообщения в виде строк с сервера, а также принимает данные из консоли для завершения сообщения на сервер.Обе эти операции должны выполняться одновременно друг с другом.Я написал код, который выполняет эти операции, но последовательно не одновременно.
Вот как выглядит мой текущий код:
func SocketClient() {
conn, err := net.Dial("tcp", ":9000")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
server_reader := bufio.NewReader(conn)
input_reader := bufio.NewReader(os.Stdin)
for {
// for sending messages
buff, err := input_reader.ReadString('\n')
if err != nil {
log.Fatalln(err)
}
conn.Write([]byte(buff))
// for receiving messages but this won't run until the above has taken input from console
buff2, err := server_reader.ReadString('\n')
if err != nil {
log.Fatalln(err)
}
fmt.Println("Received: %s", buff2)
}
}
buff получает входящие сообщения от сервера, а затем buff2 принимает входящие сообщенияиз консоли, но для того, чтобы снова получать входящие сообщения, buff2 нуждается в некотором вводе.Я знаю, что это можно сделать с помощью каналов, мьютекс-блокировок и т. Д., Но из-за недостатка понимания основ у меня возникли проблемы с их использованием.
Я думаю, что реальный код должен выглядеть примерно так:
func SocketClient() {
conn, err := net.Dial("tcp", ":9000")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
go func() {
// for sending messages
} ()
go func() {
// for receiving messages
} ()
}
Как сделать ввод и вывод как две отдельные программы?