Skip to content

Instantly share code, notes, and snippets.

@alco
Forked from gmile/client.go
Last active December 16, 2015 15:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alco/5456211 to your computer and use it in GitHub Desktop.
Save alco/5456211 to your computer and use it in GitHub Desktop.
package main
import "net"
import "bufio"
func main() {
conn, err := net.Dial("tcp", ":8080")
if err != nil {
println("There was an error:", err)
}
my_string_writer := bufio.NewWriter(conn)
_, err = my_string_writer.WriteString("api_call_1\n")
_, err = my_string_writer.WriteString("api_call_2\n")
// Одного флаша достаточно. Не стоит строить логику сервера на последовательности
// флашей клиента.
// Сервер всегда видит непрерывный поток данных. Отдельные команды мы различаем
// при помощи делимитера ('\n' в данном случае).
err = my_string_writer.Flush()
// BONUS
// Отправим одну неизвестную команду
my_string_writer.WriteString("lollypop\n")
// Отправим что-то без делиметера и завершим соединение
my_string_writer.WriteString("I just wanted to say...")
my_string_writer.Flush()
conn.Close()
}
package main
import "net"
import "bufio"
func main() {
ln, err := net.Listen("tcp", ":8080")
if err != nil {
println("There was an error:", err)
}
// Внешний цикл для того, чтобы сервер не завершал работу после отключения клиента
for {
conn, err := ln.Accept()
if err != nil {
println("Didn't work")
continue // чтобы не споткнуться дальше
}
reader := bufio.NewReader(conn)
// Теперь циклим, чтобы получить все данные
for {
// Дока говорит, что err != nil только если мы получили EOF до кого, как
// был найден delim
my_string, err := reader.ReadString('\n')
if err != nil {
println("Got EOF or disconnect")
println("Leftover data:", my_string)
break
}
switch my_string {
case "api_call_1\n":
println("Hello")
case "api_call_2\n":
println("World")
default:
print("Unrecognized command: ", my_string)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment