我制作了一个小型客户端程序,它将从服务器接收消息。我希望在收到消息后安全地断开客户端与服务器的连接。(另一种情况也可能出现,我想将接收到的值与另一个值进行比较,如果不匹配,客户端将断开连接)我的样本代码是:
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();
}
}
我需要添加哪些其他内容?
答案 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字段,并且只在处理消息传递对象时进行处理。