C# 如何在网络流接收到值后将其返回到其他类(消息聊天)
我很难说出这个问题并解决我的问题 我正在挑战自己创建一个包含多个聊天客户端的聊天服务器 我已经创建了一个服务器,在通过TCP接收新连接时实例化一个新的C# 如何在网络流接收到值后将其返回到其他类(消息聊天),c#,C#,我很难说出这个问题并解决我的问题 我正在挑战自己创建一个包含多个聊天客户端的聊天服务器 我已经创建了一个服务器,在通过TCP接收新连接时实例化一个新的ClientManager对象。我目前缺少各种管理方面的知识,因此请忽略这些知识,因为我首先要解决的是这一点: 一旦建立了连接,ClientManager将为接收流创建一个新的后台工作程序。我遇到的问题是,一旦读取流,我如何将该信息转发回我的主服务器类,以便将金额分配给其他客户端(聊天客户端) 再一次,我遗漏了一些管理选项,如线程、信号量等,但随着
ClientManager
对象。我目前缺少各种管理方面的知识,因此请忽略这些知识,因为我首先要解决的是这一点:
一旦建立了连接,ClientManager
将为接收流创建一个新的后台工作程序。我遇到的问题是,一旦读取流,我如何将该信息转发回我的主服务器类,以便将金额分配给其他客户端(聊天客户端)
再一次,我遗漏了一些管理选项,如线程、信号量等,但随着我的构建,这些都会出现
以下是我的服务器如何建立连接:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.ComponentModel;
namespace ChatServer
{
class Program
{
private IPAddress localAddr;
private int serverPort;
private BackgroundWorker bwListener;
private List<ClientManager> clients;
private TcpListener server;
static void Main(string[] args)
{
Program progInstance = new Program();
progInstance.clients = new List<ClientManager>();
progInstance.server = null;
try
{
// Set the TcpListener on port 13000.
progInstance.serverPort = 13000;
progInstance.localAddr = IPAddress.Parse("127.0.0.1");
// Start to listen
progInstance.bwListener = new BackgroundWorker();
progInstance.bwListener.WorkerSupportsCancellation = true;
progInstance.bwListener.DoWork += new DoWorkEventHandler(progInstance.ServerListen);
progInstance.bwListener.RunWorkerAsync();
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
// Stop listening for new clients.
//progInstance.server.Stop();
}
Console.WriteLine("\nHit enter to continue...");
Console.Read();
}
private void ServerListen(object sender, DoWorkEventArgs e) {
this.server = new TcpListener(this.localAddr, this.serverPort);
this.server.Start();
// Enter the listening loop.
while (true)
{
Console.Write("Waiting for a connection... \n");
Socket client = server.AcceptSocket();
this.AcceptClientConnection(client);
}
}
private void AcceptClientConnection(Socket client) {
ClientManager newClient = new ClientManager(client);
this.clients.Add(newClient);
}
private void DisplayClientConnections() {
}
}
}
我在想,服务器应该以某种方式检索这些信息,然后将其写入流,或者我会这样做吗?我会从ClientManager
写回流,然后让我的实际客户机监听并接收?我完全不知道如何处理聊天服务器的这一部分
using System;
using System.Net.Sockets;
using System.ComponentModel;
namespace ChatServer
{
class ClientManager
{
NetworkStream stream;
private Socket socket;
private BackgroundWorker bwReceiver;
//data = null;
public ClientManager(Socket socket)
{
this.socket = socket;
this.stream = new NetworkStream(this.socket);
this.bwReceiver = new BackgroundWorker();
this.bwReceiver.DoWork += new DoWorkEventHandler(StartReceive);
this.bwReceiver.RunWorkerAsync();
}
private void StartReceive(object sender, DoWorkEventArgs e) {
String data = null;
Byte[] bytes = new Byte[256];
int i;
while (this.socket.Connected) {
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received: {0}", data);
}
}
}
}
}