У вас есть две проблемы:
- Пусто БУФ в handleClient
- Тупик между отправителем и получателем
Первый легко - просто использовать «БУФ: = сделать ([] байт, 1024) "вместо" var buf [] byte ".
Второй более подробный.
В handleClient у вас есть
fmt.Println(string(buf[0:n]))
mesg <- buf[0:n]
fmt.Println(mesg)
ind <- n
fmt.Println(ind)
Таким образом, вы отправить сообщение, а затем - длина сообщения. Но на стороне приемника у вас есть:
n := <-ind
fmt.Println("N recieved")
buf := <-mesg
fmt.Println("Channels recieved")
Таким образом, вы ожидаете длину сообщения до самого сообщения. Таким образом, существует тупик: отправитель ожидает, что кто-то получит сообщение перед отправкой длины, но получатель ожидает получения длины сообщения до получения сообщения.
Просто измените handleClient иметь противоположный порядок, и он будет работать:
fmt.Println(string(buf[0:n]))
ind <- n
mesg <- buf[0:n]
fmt.Println(mesg)
fmt.Println(ind)
Что такое 'п, эээ: = conn.Read (ЬиЙ [0:])' должен делать, если ЬиЙ пуст? Кажется, вы никогда не заселяете свои каналы. – Volker
Прошу прощения, я не совсем понимаю, что вы имеете в виду. Я думал, что conn.Read будет блокироваться до тех пор, пока данные не будут отправлены? Также не уверен, что такое заселение моих каналов. Я обыскал godoc и эффективно обходил его и ничего не придумал. – ChasingLogic
@ChasingLogic означает, что «var buf [] byte» приводит к пустому фрагменту buf. Попробуйте «buf: = make ([] byte, 1024)». – Kluyg