C#-StreamReader.ReadLine不工作!简而言之,我一直在尝试用Java实现BufferedStreamReader的功能。我打开了一个套接字流,只想以面向行的方式逐行读取它。我有以下服务器代码。while(continueProcess){try{StreamReaderreader=newStreamReader(Socket.GetStream(),Encoding.UTF8);字符串命令=reader.ReadLine();如果(命令==null)中断;OnClientExecute(命令);}catch(Exceptione){Console.WriteLine(e.ToString());}}以下客户端代码:TcpClienttcpClient=newTcpClient();尝试{tcpClient.Connect("localhost",serverPort);StreamWriterwriter=newStreamWriter(tcpClient.GetStream(),Encoding.UTF8);writer.AutoFlush=true;writer.WriteLine("登录>用户,密码");writer.WriteLine("print>param1,param2,param3");}catch(Exceptione){Console.WriteLine(e.ToString());}最后{tcpClient.Close();服务器只读取第一行(login>user,pass),然后ReadLine返回null!在Java的BufferedStreamReader中实现这种面向行的阅读器的最简单方法是什么?:■典型的行阅读器如下所示:using(StreamReaderreader=newStreamReader(Socket.GetStream(),Encoding.UTF8)){while((line=reader.ReadLine())!=null){//dosomethingwithline}}(注意使用以确保我们Dispose()它即使我们得到一个错误,然后循环)如果需要,使用迭代器块抽象(关注点分离):while((line=reader.ReadLine())!=null){yieldreturnline;}}}(请注意,我们已将其移至一个函数中并删除了“dosomething”,将其替换为“yieldreturn”,它创建了一个迭代器(一种惰性迭代的非缓冲状态机),然后我们将其简单地用作following:foreach(stringlineinReadLines(Socket.GetStream(),Encoding.UTF8)){//dosomethingwithline}现在我们的处理代码不需要担心如何读取行-只需要给定一个序列行,用它们做点什么注意使用(Dispose())也适用于TcpClient;你应该养成检查IDisposable习语的习惯;例如(仍然包括你的错误日志):using(TcpClienttcpClient=newTcpClient()){尝试{tcpClient.Connect("localhost",serverPort);StreamWriterwriter=newStreamWriter(tcpClient.GetStream(),Encoding.UTF8);writer.AutoFlush=true;writer.WriteLine("login>user,pass");writer.WriteLine("print>param1,param2,param3");}catch(Exceptionex){Console.Error.WriteLine(ex.ToString());}}服务器代码中的while设置为只读一行每个连接。尝试读取所有已发送的行时,您将需要另一个。我想一旦在客户端设置了流,它就会发送所有数据。然后在服务器端,您的流实际上只从该特定流中读取一行。试过这个并得到找不到类型或命名空间名称“Stream”(是否缺少using指令或程序集引用?)找不到类型或命名空间名称“StreamReader”(是否缺少using指令或程序集引用?)找不到类型或命名空间名称“StreamReader”(是否缺少using指令或程序集引用?)“System.Net.Sockets.Socket”不包含“GetStream”公共字符串READS()的定义{byte[]buf=newbyte[CLI.Available];//设置缓冲区CLI.Receive(buf);//从流中读取字节stringline=UTF8Encoding.UTF8.GetString(buf);//从字节中获取字符串returnline;//从字节返回字符串}publicvoidWRITES(stringtext){byte[]buf=UTF8Encoding.UTF8.GetBytes(text);//获取文本的字节CLI.Send(buf);//发送字节}CLI是一个插座。对于某些重新区域,TcpClient类不再在我的计算机上工作,但Socket类工作得很好。UTF-8isastrandedStreamReader/Writerencoding以上是C#学习教程:C#-StreamReader.ReadLinenotworkingproperly!如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
