下午好,我一直試圖讓一個系統有點像使用convo組合的skype,能夠進入一個組並與其他在線聊天的人聊天組,問題是我不知道如何我可以將這個聊天室分成幾個,並使他們彼此獨立,只有一臺服務器C#使用多客戶端服務器套接字創建聊天室
總的來說,即時嘗試有一個服務器,同時可以保存多人聊天室對話聊天記錄並能夠讀取它
當前代碼我只能用作1個一般聊天室 服務器端:
static void Main(string[] args)
{
Socket newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Ip);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 6000);
newSocket.Bind(endPoint);
newSocket.Listen(10);
Console.Write("Waiting...\n");
while (true)
{
Socket auxSocket = newSocket.Accept();
ThreadLab a = new ThreadLab(auxSocket);
Thread novaThread = new Thread(new ThreadStart(a.Connect));
novaThread.Start();
}
}
的ThreadLab類:
private Socket socket;
static int nmrUsers = 0;
static int indice;
static Socket[] listaSockets = new Socket[10];
static ArrayList listaUtilizadores = new ArrayList();
public ThreadLab(Socket s)
{
socket = s;
listaSockets[indice++] = s;
}
public void Connect()
{
IPEndPoint aux = (IPEndPoint)socket.RemoteEndPoint;
Console.Write("Client " + aux.Address.ToString() + " connected\n");
}
這將有讀寫器的客戶端:
private static Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Ip);
private static ThreadStart tSReader;
private static ThreadStart tSWriter;
private static Thread tReader;
private static Thread tWriter;
private static string nome;
static void Main(string[] args)
{
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6000);
tSReader = new ThreadStart(reader);
tSWriter = new ThreadStart(writer);
tReader = new Thread(tSReader);
tWriter = new Thread(tSWriter);
try
{
client.Connect(clientEndPoint);
}
catch (SocketException e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
return;
}
tReader.Start();
tWriter.Start();
}
public static void writer()
{
string str;
byte[] data = new byte[1024];
nome = Console.ReadLine();
data = Encoding.ASCII.GetBytes(nome);
client.Send(data, data.Length, SocketFlags.None);
do
{
str = Console.ReadLine();
data = Encoding.ASCII.GetBytes(str);
client.Send(data, data.Length, SocketFlags.None);
} while (str != "exit");
client.Shutdown(SocketShutdown.Both);
tReader.Abort();
client.Close();
}
public static void reader()
{
byte[] data = new byte[1024];
int recv;
while (true)
{
try
{
recv = client.Receive(data);
}
catch (Exception e)
{
Console.WriteLine("Erro: " + e.Message);
Console.ReadLine();
break;
}
Console.WriteLine("\n" + Encoding.ASCII.GetString(data, 0, recv));
}
}
}
一直有相當一些麻煩,試圖找到我的問題,但沒有解決方案有效,如果有人能幫助我解決這個問題,真的會感覺不舒服:\
@TomTom謝謝你的CONSTRUCTIVE評論。請解釋你的觀點。 –
@TomTom啊,這就是爲什麼...看到我沒有意識到這個問題。在架構方面,這篇文章並沒有那麼糟糕:OP需要圍繞MCV模式重新構建架構,以便有辦法處理多個連接。 FWI:如果你來這裏幫助人們:改變你的解釋方式,沒有人知道你的每一個角落,甚至沒有你......所有解決方案都有不同的方法是正常的,所有的解決方案都有優點和缺點:我們在這裏不討論它們爭論和侮辱他們。祝你有美好的一天。 –
你能舉出線程內的線程的例子嗎?即時通訊試圖瞭解,如果你能夠在代碼中告訴我如何做到這一點,那真的很有幫助:\ –