一个即时通信程序的问题,请各位高手指教

heidong2002 2009-04-24 09:03:27
一个即时通信程序的问题,请各位高手指教
程序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到的信息分配到每个对话界面,同时可以在对话界面中对话?
请大家一定帮帮忙,谢谢。
...全文
142 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovvver 2009-05-05
  • 打赏
  • 举报
回复
关注一下
mooreisok 2009-05-05
  • 打赏
  • 举报
回复
你说的服务器端还是客户端的处理?
通常
对于服务器,当收到的MESSAGE后,根据MESSAGE的TO属性,找到相应与客户端的连接,把MESSAGE分发出去就O了
对于客户端,你只需要一个SOCKET与服务器连接, 然后根据收到的MESSAGE的FROM属性,决定弹出几个对话框.
heidong2002 2009-04-28
  • 打赏
  • 举报
回复
晕,还是不行
private TcpListener qTcpListener = null;
private Thread qCliTh1;

public bool StartClientListen(IPEndPoint qSerIpendPoint)
{
try
{
qTcpListener = new TcpListener(qSerIpendPoint);
qTcpListener.Start();
qCliTh1 = new Thread(new ThreadStart(JstListenerIng));
qCliTh1.Start();
return (true);
}
catch
{
return (false);
}
}

private void JstListenerIng()
{
try
{
while (true)
{
if (qTcpListener.Pending())
{
Socket mySocket;
mySocket = qTcpListener.AcceptSocket();

//为每一个用户开启一个线程
System.Threading.Thread clientThread = new System.Threading.Thread(new System.Threading.ThreadStart(chat_show));
clientThread.IsBackground = true;
clientThread.Start();
}
System.Threading.Thread.Sleep(100);
}

}
catch { }
}

private void chat_show()
{
chat1 gform = new chat1();
gform.Show();
}

程序运行后,chat1窗口一闪过,这会是什么原因??是我线程的方法有误吗???
wuyq11 2009-04-24
  • 打赏
  • 举报
回复
这同QQ,用TcpListener同时监听多个IP地址
参考
天乐 2009-04-24
  • 打赏
  • 举报
回复
1、每一个与你通讯的人,与你都有一个Socket连接要建立。楼主还需要了解一下Socket的基础知识

2、我一般是定义一个的Socket通讯服务类,此类采用线程池技术,负责侦听端口,接受客户连接,处理数据收发等工作,通过事件与UI层交互

wts_net 2009-04-24
  • 打赏
  • 举报
回复
关注
whyabc 2009-04-24
  • 打赏
  • 举报
回复
up
陌上花花 2009-04-24
  • 打赏
  • 举报
回复
帮顶了,
heidong2002 2009-04-24
  • 打赏
  • 举报
回复
有针对我程序的具体建议吗?谢谢.
ericzhangbo1982111 2009-04-24
  • 打赏
  • 举报
回复
给你个例子

http://www.codeproject.com/KB/IP/socketsincs.aspx
viki117 2009-04-24
  • 打赏
  • 举报
回复
学习下,Socket哦。。
网页编程直接用HTTP传输不更方便
蓝海D鱼 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 agentianle 的回复:]
1、每一个与你通讯的人,与你都有一个Socket连接要建立。楼主还需要了解一下Socket的基础知识

2、我一般是定义一个的Socket通讯服务类,此类采用线程池技术,负责侦听端口,接受客户连接,处理数据收发等工作,通过事件与UI层交互
[/Quote]up

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧