提问人:Karen0104 提问时间:11/5/2021 更新时间:11/5/2021 访问量:325
ReadString 读取 EOF 时如何打破循环?
How to break the loop when ReadString read EOF?
问:
我正在为服务器和客户端编写简单的代码,这是服务器部分。我想一次从套接字中读取一行消息并将其写入 newfile。但是,如果代码读取 EOF,则代码将停止运行。我想知道如何打破循环并继续运行下面的代码。 谢谢!
package main
import "fmt"
import "bufio"
import "net"
import "os"
import "log"
//import "strings"
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
fmt.Println("Launching server...")
ln, _ := net.Listen("tcp", ":12003")
conn, _ := ln.Accept()
defer ln.Close()
defer conn.Close()
//read file size(string)
reader1 := bufio.NewReader(conn)
m_size, err1 := reader1.ReadString('\n')
check(err1)
//print file size
fmt.Printf("Upload file size: %s", m_size)
//create new file
out_file := "whatever.txt"
newfile, err2 := os.Create(out_file)
check(err2)
defer newfile.Close()
//read and write line to new file
writer1 := bufio.NewWriter(newfile)
var i = 1
line, err3 := reader1.ReadString('\n')
check(err3)
for err3 == nil {
writer1.WriteString(fmt.Sprintf("%d %s", i, line))
line, err3 = reader1.ReadString('\n')
if err3 != nil {
break
}
i += 1
}
writer1.Flush()
// get the new file's size and print
stats, errr := os.Stat(out_file)
if errr != nil {
log.Fatal(errr)
}
fmt.Printf("Output file size: %d\n", stats.Size())
// send message back to client
writer2 := bufio.NewWriter(conn)
m_size = strings.Replace(m_size, "\n", "", -1)
newline := fmt.Sprintf("%s bytes received, %d bytes file generated",m_size,stats.Size())
_, errw := writer2.WriteString(newline)
check(errw)
writer2.Flush()
}
答: 暂无答案
评论
line, err3 = reader1.ReadString('\n')
check(error)
bufio.Scanner