使用来自 2 种不同形式的相同 tcp 客户端
Using the same tcp client from 2 different forms
我正在我的主窗体上创建一个 tcpClient,我正在读写一个 irc 服务器。
tcpClient = new TcpClient(serverName, 6667);
reader = new StreamReader(tcpClient.GetStream());
writer = new StreamWriter(tcpClient.GetStream());
writer.AutoFlush = true;
有时我的应用会打开第二个表单,其中包含一些选项的列表框,我想双击其中一个选项并向初始流写入一些内容。我曾尝试在同一端口上使用新的 reader 和 writer 创建一个新的 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");
}
有人能给我指出正确的方向吗?
就像你一样,我不是 C# 方面的专家,我只是出于业余爱好而自学编程。所以也许有更好的方法来做到这一点,但这就是我自己的方法。
像这样向您的项目添加一个新的 class:
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 class 中将其设为静态函数并调用 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
在Shared
中声明client
class意味着它没有被class的实例引用。因此,您不必先执行 Shared sharedClass = new Shared();
即可访问它,如果您制作了 Shared class client
的 2 个实例,则只有一个实例可供两个实例访问class.
我正在我的主窗体上创建一个 tcpClient,我正在读写一个 irc 服务器。
tcpClient = new TcpClient(serverName, 6667);
reader = new StreamReader(tcpClient.GetStream());
writer = new StreamWriter(tcpClient.GetStream());
writer.AutoFlush = true;
有时我的应用会打开第二个表单,其中包含一些选项的列表框,我想双击其中一个选项并向初始流写入一些内容。我曾尝试在同一端口上使用新的 reader 和 writer 创建一个新的 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");
}
有人能给我指出正确的方向吗?
就像你一样,我不是 C# 方面的专家,我只是出于业余爱好而自学编程。所以也许有更好的方法来做到这一点,但这就是我自己的方法。
像这样向您的项目添加一个新的 class:
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 class 中将其设为静态函数并调用 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
在Shared
中声明client
class意味着它没有被class的实例引用。因此,您不必先执行 Shared sharedClass = new Shared();
即可访问它,如果您制作了 Shared class client
的 2 个实例,则只有一个实例可供两个实例访问class.