【问题标题】:Correct use of StreamWriter正确使用 StreamWriter
【发布时间】:2017-09-22 20:27:58
【问题描述】:

经过几次尝试,我无法让 StreamWriter 正确构建/工作,所以我做的事情根本上是错误的(C#、Visual Studio)

我有一个现有的 TCP 客户端,它连接并充当阅读器,它可以正常工作 -

private System.Net.Sockets.NetworkStream ns;
        private System.IO.StreamReader sr;
        private string strIP;
        private string strPort;
        public System.Net.Sockets.TcpClient tc;

        public Socketclient(Reader.Search objSearch)
        {
            m_search = objSearch;
        }

        public void EthernetConnection()
        {
            try
            {
                bool flag = !System.IO.File.Exists(System.Windows.Forms.Application.StartupPath + "\\IPAddress.txt");
                if (!flag)
                {
                    System.IO.TextReader textReader = System.IO.File.OpenText(System.Windows.Forms.Application.StartupPath + "\\IPAddress.txt");
                    string s = textReader.ReadLine();
                    textReader.Close();
                    char[] chArr = new char[] { ';' };
                    string[] sArr = s.Split(chArr);
                    strPort = sArr[0];
                    strIP = sArr[1];
                    flag = strIP == System.String.Empty || strPort == System.String.Empty;
                    if (!flag)
                    {
                        int i = System.Convert.ToInt16(strPort);
                        tc = new System.Net.Sockets.TcpClient(strIP, i);
                        flag = !tc.Connected;
                        if (!flag)
                        {
                            ns = tc.GetStream();
                            sr = new System.IO.StreamReader(ns);
                            m_search.threadClient = new System.Threading.Thread(new System.Threading.ThreadStart(ReceiveData));
                            m_search.threadClient.Priority = System.Threading.ThreadPriority.Lowest;
                            m_search.threadClient.Name = "Ethernet Thread";


   }

然后我想添加(在另一个属于同一应用程序的 .cs 中)一个 StreamWriter 线程以将一些字符写回同一个端口,然后关闭 StreamWriter 线程(让阅读器运行)-

private System.IO.StreamWriter sw;

string line = "TH1/r/n";
using (StreamWriter sw = new StreamWriter(ns));
sw.WriteLine(line);
sw.Flush();
sw.Close();

其中,不知何故(我认为)需要参考

ns = tc.GetStream();

感谢任何想法

问候 活跃

【问题讨论】:

  • 听起来这个问题不是关于StreamWriter 或tcp,而是关于基本类设计?因此,如果没有看到您的项目,这有点宽泛且难以分辨。如果您想在整个班级中访问sw,请将其设为班级的字段。如果您甚至想从类外部(不同的 .cs 文件)访问它,请创建一个公开该值的公共属性。但这是基本的 c# 知识,在问这里之前你应该知道,但也许我误解了这个问题。
  • How do I reference the already running client (in a separate .cs) 当您建立从客户端到服务器的连接时,您需要存储TcpClient 引用以供将来访问。你这样做吗?如果是,那么tcns 应该存在并且在您访问和调用sw = new System.IO.StreamWriter(tc.GetStream());sw = new System.IO.StreamWriter(ns); 的范围内。如果没有,那么我们需要查看所有相关代码
  • 看起来您正在发布从您的代码中组合在一起的块。我们需要查看实际的方法或类。你发布它的方式,它看起来像是在上下文中。
  • 我需要一个简单易懂的 StreamWriter 例子
  • 您发布了代码的不完整部分,其中包含不相关的另一部分。请修改您的问题并写清楚,请

标签: c# tcp


【解决方案1】:

这种问题已经被问过很多次了。

Receving and sending data in C#

上述示例的简要说明和过去显示数据的发送

using(TcpClient tcpClient = new TcpClient("ADDRESS"))
{
    NetworkStream networkStream = tcpClient.GetStream();
    using(StreamWriter streamWriter = new StreamWriter(networkStream))
    {
        streamWriter.WriteLine(data);
    }
}

【讨论】:

  • StreamWriter 必须有一个参数 (ns),它必须以某种方式引用 ns = tc.GetStream() 并且当然 ns 不在此 .cs 中的上下文中
  • ns 是您的直播吗?而tc是什么类型的,TcpClient?
  • stackoverflow.com/questions/1836811/…你的问题是重复的!
  • ns 是私有 System.Net.Sockets.NetworkStream ns;并且 tc 是 TcpClient
  • 我明白了。这不是您所需要的。您将需要稍微修改代码以“适合”您的确切要求。这是“我”通过谷歌搜索“轻松”找到的所有基本内容。在此示例中,NetworkStream 可以简单地替换为您在其他地方定义的成员。 TcpClient 也可以替换。而不是使用 using 完成后,只需关闭 TcpClient 和 NetworkStream
【解决方案2】:

问题是 StreamWriter 周围的 using 块,删除它允许底层流继续。

【讨论】:

    猜你喜欢
    • 2012-07-13
    • 2014-03-03
    • 2018-10-17
    • 2015-03-10
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多