首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NetworkStream.Read不抛出异常

NetworkStream.Read不抛出异常
EN

Stack Overflow用户
提问于 2016-04-08 12:49:41
回答 2查看 2.2K关注 0票数 0

我无法运行此示例:https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient%28v=vs.110%29.aspx

我在他们的代码中所做的唯一改变就是把所有的东西都放在主方法中,当然还有我的端口名。我可以连接到我的服务器,甚至发送数据。但在线上

代码语言:javascript
运行
复制
Int32 bytes = networkStream.Read(data, 0, data.Length); 

程序毫无例外地停止运行。微软自己的代码怎么能不工作呢?我的服务器还没有发送任何东西,但我认为这不重要吗?(不过,它收到的效果很好。)我读过一些你不能在其他线程中看到异常的东西,但我没有任何例外。我也尝试过这个线程:C# tcp socket (networkstream.read won't work with 8.1)

它不起作用。我跑赢了7次。但我希望这能用一个全新的窗户。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-08 12:53:32

NetworkStream.Read阻塞,直到数据可用为止,连接被关闭(在这种情况下它将返回0 )或出现异常。它是这样设计的。

如果您的服务器将发送数据,您的客户端程序将继续并能够处理响应。

票数 2
EN

Stack Overflow用户

发布于 2016-04-08 12:59:43

NetworkStream.Read()是一个同步调用,它将等待直到接收到响应。要读取不同长度的数据,可以执行以下操作。

注意:我假设服务器只为请求发送一个响应。

代码语言:javascript
运行
复制
private string GetResponse(string command)
{
    //Send request
    TcpClient client = new TcpClient(HOST, PORT);
    Byte[] data = Encoding.ASCII.GetBytes(command);
    NetworkStream stream = client.GetStream();
    stream.Write(data, 0, data.Length);

    //Read response
    data = new Byte[BUFFER_SIZE];
    String response = String.Empty;
    stream.ReadTimeout = READ_TIMEOUT;
    while (!response.EndsWith(RESPONSE_END))
    {
        int bytes = stream.Read(data, 0, data.Length);
        response += Encoding.ASCII.GetString(data, 0, bytes);
    }
    response = response.Remove(response.Length - RESPONSE_END.Length);
    stream.Close();
    client.Close();

    //Return
    return response;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36499984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档