繁体   English   中英

在C#套接字中收到消息后,将客户端与服务器断开连接

[英]disconnecting a client from server after receiving message in c# socket

我做了一个小的客户端程序,它将接收来自服务器的消息。 我想在收到消息后安全地断开客户端与服务器的连接。(另一种情况是,我想将接收到的值与另一个值进行比较,如果不匹配,客户端将被断开连接)代码是:

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
class Program
{

    static void Main(string[] args)
    {
        try
        {                
            TcpClient tcpClient = new TcpClient("127.0.0.1", 1234);

            NetworkStream ns = tcpClient.GetStream();
            StreamReader sr = new StreamReader(ns);
            StreamWriter sw = new StreamWriter(ns);
            string data;

            //receiving message
            data = sr.ReadLine();
            Console.WriteLine(data);

            //I want to disconnect here     
         }
        catch (Exception e)
        {
            Console.Write(e.Message);
        }

        Console.Read();
    }
}

我还需要添加什么?

只需将TcpClient实例和NetworkStream的用法包装在using块中:

using(TcpClient tcpClient = new TcpClient("127.0.0.1", 1234))
using(NetworkStream ns = tcpClient.GetStream())
{
  // Do read here
}

我会更像您的代码结构:

using (var tcpClient = new TcpClient("127.0.0.1", 1234))
{
    using(var ns = tcpClient.GetStream())
    {
        StreamReader sr = new StreamReader(ns);
        StreamWriter sw = new StreamWriter(ns);
        string data;

        //receiving message
        data = sr.ReadLine();

        if(data == somePreDeterminedValue)
        {
            Console.WriteLine(data);
        }
    }
}

这意味着当您点击右括号时,它将自动为您关闭TCPClient和NetworkStream并处置它们的实例。

在这种情况下,如果您从流中获取的值是正确的,那么它将不会断开连接,很简单。 我认为您需要提供总体上想要做的问题的完整答案,就像我要做的这个简单术语一样,但是在此示例中,无论如何,TCPClient都是关闭的。

在实际的应用程序中,您实际上希望保留在整个应用程序中打开和关闭的TCPClient字段,并且仅在处理消息传递对象时才进行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM