【发布时间】:2019-05-10 07:02:55
【问题描述】:
我正在 Visual Studio 上使用 C# 开发一个聊天框应用程序。我有一个控制台服务器和一个带有图形界面的聊天。 我成功发送数据:聊天框-> 服务器。还有服务器 - > 聊天框,但仅适用于发送信息的聊天框(当聊天框发送信息时,服务器必须将其发送给所有人,但它仅适用于发送者)。 我希望所有应用程序都收到信息。 实际上 : 应用程序 1 -> 服务器 服务器 -> 应用程序 1 不是应用程序 2 我不明白为什么。感谢您未来的帮助。
public void start()
{
TcpListener l = new TcpListener(new IPAddress(new byte[] { 127, 0, 0, 1 }), port);
l.Start();
while(true)
{
TcpClient comm = l.AcceptTcpClient();
Console.WriteLine("Connection established @" + comm);
new Thread(new Receiver(comm).doOperation).Start();
}
}
class Receiver
{
private TcpClient comm;
public Receiver(TcpClient s)
{
comm = s;
}
public void doOperation()
{
Semaphore s = new Semaphore(1, 1);
while (true)
{
s.WaitOne();
NetworkStream nwStream = comm.GetStream();
byte[] buffer = new byte[comm.ReceiveBufferSize];
//---read incoming stream---
int bytesRead = nwStream.Read(buffer, 0, comm.ReceiveBufferSize);
//---convert the data received into a string---
string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received " + dataReceived);
s.Release();
s.WaitOne();
Console.WriteLine("Send to all : " + dataReceived);
nwStream.Write(buffer, 0, bytesRead);
s.Release();
}
}
}
我在聊天框中收到信息:
public Form1(string h, int p)
{
...
comm = new TcpClient(h, p);
nwStream = comm.GetStream();
Thread th1 = new Thread(receive);
th1.Start();
}
public void receive()
{
while (true)
{
byte[] bytesToRead = new byte[comm.ReceiveBufferSize];
int bytesRead = nwStream.Read(bytesToRead, 0, comm.ReceiveBufferSize);
MessageBox.Show("Appli info received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead));
}
}
【问题讨论】:
标签: c# multithreading server tcplistener