所以我编写了一个服务器,它接收来自连接客户端的短信,对其进行反转和限制并将其发回。
现在我正在尝试对客户端进行编程,这样当我启动它时它会一直运行直到我关闭它(ctrl + c)并允许我输入文本行并将它们发送到服务器。
我遇到了一个问题 - 如果我将一个,例如,西里尔符号传递给输入,它将返回<nil> <nil>
(类型,值)错误,并且除非我以某种方式刷新内存,否则将保持错误。
我也无法计算如何读取整个信息(整个意思是切片的大小(1024字节)),而不是分别读取每个字。
此外,我如何弄清楚如何延迟输入您的信息&#39;文本?根据我传递给服务器的消息长度,它应该等待更长或更短。如果邮件被分成几条消息,我不希望它在整个地方弹出,只是在收到答案后一次。
以下是相关代码:
func client() {
// connect to the server
c, err := net.Dial("tcp", "127.0.0.1"+":"+port)
if err != nil {
log.Printf("Dial error: %T %+v", err, err)
return
}
// send the message
msg := ""
for {
fmt.Print("Enter your message:\n")
_, errs := fmt.Scan(&msg)
if errs != nil {
log.Printf("Scan error: %T %+v", errs, errs)
return
}
fmt.Println("Client sending:\n", msg)
_, errw := c.Write([]byte(msg))
if errw != nil {
log.Printf("Write error: %T %+v", errw, errw)
return
}
// handle the response
go handleServerResponse(c)
time.Sleep(1 * time.Second)
}
func main() {
port = "9999"
// launch client
done := make(chan bool)
go client()
<-done // Block forever
}
我使用空通道阻止main()结束。
我应该如何处理上述两个问题?
答案 0 :(得分:0)
@JimB回答的问题:
您正在使用fmt.Scan扫描空格分隔值。不要用 如果您不想单独阅读每个值。您可以使用 Scanln读取一行,或直接从stdin读取。