2017-09-18 5 views
-1

Après plusieurs tentatives, je ne peux pas StreamWriter pour construire/travail corectly donc je suis en train de faire quelque chose de fondamentalement mauvais (C#, Visual Studio)Utilisation correcte de StreamWriter

je un client TCP exisitng qui relie et agit comme lecteur, cela fonctionne sans faute -

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"; 


    } 

Je veux ajouter ensuite (dans un autre .cs qui fait partie de la même application) un fil StreamWriter pour écrire de nouveau certains caractères au même port, puis fermez le StreamWriter fil (laissant le lecteur en marche) -

private System.IO.StreamWriter sw; 

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

Ce qui, en quelque sorte (je pense) a besoin de se référer à

ns = tc.GetStream(); 

Tout thougts apprécié

Cordialement actifs

+1

On dirait que cette question n'est pas sur 'StreamWriter' ou tcp, mais sur la conception de classe de base? C'est donc un peu large et difficile à dire sans voir votre projet. Si vous voulez accéder à 'sw' dans toute votre classe, faites-en un domaine de votre classe. Si vous voulez même y accéder depuis l'extérieur de la classe (fichier .cs différent), créez une propriété publique qui expose la valeur. Mais ce sont des choses de base que vous devriez savoir avant de demander ici, mais peut-être que je ne comprends pas la question. –

+0

'Comment faire référence au client déjà en cours d'exécution (dans un fichier .cs séparé)' Lorsque vous établissez une connexion entre votre client et le serveur, vous devez stocker la référence 'TcpClient' pour un accès ultérieur. Est-ce que vous faites ça? Si oui, alors 'tc' ou' ns' devrait être vivant et dans la portée pour que vous puissiez y accéder et appeler 'sw = new System.IO.StreamWriter (tc.GetStream());' ou 'sw = new System.IO .StreamWriter (ns); '. Si ce n'est pas le cas, nous aurons besoin de voir tout le code ** pertinent ** – Vikhram

+1

Il semble que vous publiez des morceaux regroupés à partir de votre code. Nous devons voir la méthode ou la classe réelle. La façon dont vous l'avez posté, il semble que ce soit dans son contexte. – JuanR

Répondre

0

ce genre de question a été posée à plusieurs reprises déjà.

Receving and sending data in C#

brève coupe et passé de l'exemple ci-dessus montrant l'envoi des données

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

StreamWriter doit avoir un argument (ns) qui doit en quelque sorte renvoyer à ns = tc.GetStream() et bien sûr ns n'est pas en contexte dans ce .cs – Active

+1

ns est votre courant? et tc est de quel type, TcpClient? –

+1

https://stackoverflow.com/questions/1836811/receving-and-sending-data-in-c-sharp votre question est un doublon! –

0

La question a été l'utilisation de bloc autour StreamWriter, le retirer a permis au flux sous-jacent de continuer.