在c#socket中接收消息后断开客户端与服务器的连接

时间:2015-10-01 16:27:08

标签: c# .net sockets

我制作了一个小型客户端程序,它将从服务器接收消息。我希望在收到消息后安全地断开客户端与服务器的连接。(另一种情况也可能出现,我想将接收到的值与另一个值进行比较,如果不匹配,客户端将断开连接)我的样本代码是:

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();
    }
}

我需要添加哪些其他内容?

2 个答案:

答案 0 :(得分:0)

在使用块中包装TcpClient实例和NetworkStream的用法:

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

答案 1 :(得分:0)

我会更像你的代码:

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字段,并且只在处理消息传递对象时进行处理。