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
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. –
'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
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