一个即时通信程序的问题,请各位高手指教
一个即时通信程序的问题,请各位高手指教
程序Form1.cs:
IPEndPoint myIPEnd = new IPEndPoint(IPAddress.Parse("192.168.0.6"), 8000);
CListener.StartClientListen(myIPEnd);
程序talk.cs:
private void button1_Click(object sender, EventArgs e)
{
try
{
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(IPAddress.Parse("192.168.0.6"),8000);
Stream stm = tcpclnt.GetStream();
UTF8Encoding asen = new UTF8Encoding();
byte[] ba = asen.GetBytes("1;" + richTextBox2.Text.ToString());
stm.Write(ba, 0, ba.Length);
stm.Close();
tcpclnt.Close();
}
catch
{
}
}
类:clientListener.cs:
public class clientListener
{
private Thread qCliTh;
private TcpListener qTcpListener = null;
private string parameter ="";//保存接收的参数
public bool StartClientListen(IPEndPoint qSerIpendPoint)
{
try
{
qTcpListener = new TcpListener(qSerIpendPoint);
qTcpListener.Start();
qCliTh = new Thread(new ThreadStart(JstListenerIng));
qCliTh.Start();
return (true);
}
catch
{
return (false);
}
}
private void JstListenerIng()
{
try
{
while(true)
{
Socket QS;
QS = qTcpListener.AcceptSocket();
string RemoteEndPoint = QS.RemoteEndPoint.ToString();
string ip = ((IPEndPoint)QS.RemoteEndPoint).Address.ToString();
Byte[] Stream = new Byte[1024];
QS.Receive(Stream);
string save = System.Text.Encoding.UTF8.GetString(Stream);
string Sendmsg = "";
CheckOutDate(save);
switch (parameter)
{
case "1":
//.........;
break;
case "2":
//..........;
break;
default:
break;
}
QS.Close();
}
}
catch { }
}
private void SendMsg(Socket So, string msg)
{
UTF8Encoding SendByte = new UTF8Encoding();
So.Send((SendByte.GetBytes(msg)));
}
private void SendFile(Socket So, string FileUrl)
{
So.SendFile(FileUrl);
}
private void CheckOutDate(string str)
{
parameter = str.Substring(0, 1);
}
///-------------------------------------------------------------------------------------------
现在,有几个问题没想通:
1 . 如果几个人都向我发来对话信息,我想为每个对话者打开一个对话界面,我应该怎么办?
2 . 难道要为每个对话界面建立一个新的Socket?,好象不太可行, 大家怎么做的??但如果不这样,我又怎么把Listen到的信息分配到每个对话界面,同时可以在对话界面中对话?
请大家一定帮帮忙,谢谢。