我正在我的主窗体上创建一个tcpClient,我正在读取并写入irc服务器。
tcpClient = new TcpClient(serverName, 6667);
reader = new StreamReader(tcpClient.GetStream());
writer = new StreamWriter(tcpClient.GetStream());
writer.AutoFlush = true;
在某些时候,我的应用程序打开第二个表单,其中包含一些选项的列表框,我想双击其中一个选项并将内容写入初始流。我尝试使用新的读写器在同一端口上创建一个新的tcpClient,但这似乎不起作用。
private void listBox_MouseDoubleClick(object sender, MouseEventArgs e)
{
SendMessage("some message");
}
private void SendMessage(string message)
{
TcpClient tcpClient;
StreamReader reader;
StreamWriter writer;
string serverName = "chicago.il.us.undernet.org";
tcpClient = new TcpClient(serverName, 6667);
reader = new StreamReader(tcpClient.GetStream());
writer = new StreamWriter(tcpClient.GetStream());
writer.AutoFlush = true;
writer.WriteLine("PRIVMSG #chan :" + message + "\r\n");
}
有人能指出我正确的方向吗?
答案 0 :(得分:0)
就像你一样,我不是C#的专家,我只是作为一个爱好编程而且我是自学成才。所以也许有更好的方法来做到这一点,但这就是我自己接近它的方式。
为您的项目添加一个新类:
namespace Test //If you copy this, remember to change the namespace to match your application
{
class Shared
{
public static TcpClient client = new TcpClient(“server”, 6667);
//OR do this and use the Connect method to connect later (see below)
public static TcpClient client = new TcpClient();
}
}
如果你使用第二个声明,你可以稍后从任何表格连接(你只需要连接一次)当表格加载或点击按钮等时使用这个:
Shared.client.Connect(serverName, 6667);
然后,在您的两个表单中,您都可以执行以下操作。或者,如果两个表单的SendMessage()函数相同,则可以始终将其作为Shared类中的静态函数并调用Shared.SendMessage("your message");
。
private void SendMessage(string message)
{
if (Shared.client.Connected)
{
StreamReader reader;
StreamWriter writer;
reader = new StreamReader(Shared.client.GetStream());
writer = new StreamWriter(Shared.client.GetStream());
writer.AutoFlush = true;
writer.WriteLine("PRIVMSG #chan :" + message + "\r\n");
}
}
使用static
在client
类中声明Shared
意味着它没有被类的实例引用。因此,在访问它之前不必执行Shared sharedClass = new Shared();
,如果您创建了共享类client
的2个实例,则只有一个实例可供该类的两个实例访问。 / p>