标签: bufferedstream

C# - StreamReader.ReadLine无法正常工作!

简单地说,我一直在努力实现BufferedStreamReaderJava中的功能.我打开了一个套接字流,只想逐行地逐行读取它.

我有以下服务器代码.

while (continueProcess)
        {
            try
            {
                StreamReader reader = new StreamReader(Socket.GetStream(), Encoding.UTF8);
                string command = reader.ReadLine();
                if (command == null)
                    break;

                OnClientExecute(command);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
Run Code Online (Sandbox Code Playgroud)

以下客户端代码:

TcpClient tcpClient = new TcpClient();
        try
        {
            tcpClient.Connect("localhost", serverPort);
            StreamWriter writer = new StreamWriter(tcpClient.GetStream(), Encoding.UTF8);
            writer.AutoFlush = true;
            writer.WriteLine("login>user,pass");
            writer.WriteLine("print>param1,param2,param3");
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        finally
        {
            tcpClient.Close();
        }
Run Code Online (Sandbox Code Playgroud)

服务器只读取第一行(login>user,pass)然后ReadLine返回null!

实现这种面向行的读者的最简单方法是什么,就像在Java中一样BufferedStreamReader?:■

.net c# readline streamreader bufferedstream

11
推荐指数
2
解决办法
3万
查看次数

为什么BufferedStream.Write会抛出"此流不支持搜索操作"?

这个让我困惑.当我甚至没有打电话时,我收到关于寻找的错误?

我的代码看起来像这样:

// send 42
uint value = 42;
byte[] msg = BitConverter.GetBytes(value);
stream.Write(msg, 0, sizeof(uint));
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

System.NotSupportedException was unhandled
Message="This stream does not support seek operations."
Source="System"
StackTrace:
   at System.Net.Sockets.NetworkStream.Seek(Int64 offset, SeekOrigin origin)
   at System.IO.BufferedStream.FlushRead()
   at System.IO.BufferedStream.Write(Byte[] array, Int32 offset, Int32 count)
...
Run Code Online (Sandbox Code Playgroud)

流是类型System.IO.BufferedStream.可能会发生什么?

编辑更多信息:

sizeof(uint)==msg.length在这种情况下.
流声明为stream = new BufferedStream(new NetworkStream(socket), 1024)

编辑:

就是这样!虽然可以在一个单独读取和写入NetworkStream,但当切换到BufferedStream它时,必须有一个单独的读取和写入.显然,只需NetworkStream在同一个套接字上调用构造函数两次即可.

如果可以的话,我会接受Justin和Hans的答案,因为我让我完全理解错误,另一个让我找到解决方案.感谢大家!

c# networkstream bufferedstream

9
推荐指数
2
解决办法
5701
查看次数

BufferedStream Flush()不写入MemoryStream()吗?

我尝试BufferedStreamMemoryStream

using (var ms = new MemoryStream(64))
using (var bs = new BufferedStream(ms, 32))
{
    var buffer = new byte[] { 0xab, 0xab, 0xab, 0xab };
    bs.Write(buffer, 0, buffer.Length);
    bs.Flush();

    var actual = new byte[4];

    int cb = ms.Read(actual, 0, actual.Length);
    Console.WriteLine(cb);
}
Run Code Online (Sandbox Code Playgroud)

它打印0。我一直希望它能打印出来,4因为我认为bs.Flush()会将4缓冲的字节写入ms

我是否以BufferedStream某种方式使用了错误,还是我的期望完全错误?

c# bufferedstream

2
推荐指数
1
解决办法
267
查看次数