我已用sockets类做了一个点对点的简单聊天程序;
以下是几个问题:
 1)如果局域网内有几台电脑装了聊天程序,请问怎么可以找到已安装聊天程序的电脑(前提是程序已启动)?;
 2)怎么可以实现广播群发?;
-------------------------------------
请各位老师指点!!!

解决方案 »

  1.   

    以下主要的程序段:
    -----------------------------
    private void StartListen()
    {
    MyTcpListener=new TcpListener(888);
    //开始监听
    MyTcpListener.Start();              
    while(true)
    {//获取TcpClient
    TcpClient MyTcpClient=MyTcpListener.AcceptTcpClient();
    NetworkStream MyStream=MyTcpClient.GetStream();
    byte[] MyBytes = new byte[1024];
    int MyBytesRead=MyStream.Read(MyBytes,0,MyBytes.Length);
    //string MyMessage=System.Text.Encoding.Default.GetString(MyBytes,0,MyBytesRead);
    string MyMessage=System.Text.Encoding.UTF8.GetString(MyBytes,0,MyBytesRead);
    this.richTextBox2.Text+=MyMessage;
    }
    }
    private void button1_Click(object sender, System.EventArgs e)
    {//发送聊天内容
    if(this.textBox1.Text.Length<1||this.textBox2.Text.Length<1||this.richTextBox1.Text.Length<1)
    return;
    try
    {
    string MyMessage= this.textBox2.Text+":"+this.richTextBox1.Text+"\n";
    //根据目标计算机地址建立连接
    TcpClient MyTcpClient = new TcpClient(this.textBox1.Text, 888);
    //获得用于网络访问的数据流
    NetworkStream MyTcpStream =MyTcpClient.GetStream();
    StreamWriter MyStream = new StreamWriter(MyTcpStream);
    //将字符串写入流
    MyStream.Write(MyMessage);
    //将缓冲数据写入基础流
    MyStream.Flush();
    //关闭网络流
    MyStream.Close();
    MyTcpClient.Close(); 
    this.richTextBox3.AppendText(this.richTextBox1.Text+"\n");
    this.richTextBox1.Clear();
    }
    catch(Exception Err)
    {
       MessageBox.Show(Err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    }
    private void Form1_Load(object sender, System.EventArgs e)
    {//开始监听
    //创建监听线程
    this.MyListenThread= new Thread(new ThreadStart(StartListen));
    //启动线程
    this.MyListenThread.Start();
    } private void Form1_Closed(object sender, System.EventArgs e)
    {//关闭SOCKET
    try
    {
    if (this.MyTcpListener!=null)
    {//关闭监听器
    this.MyTcpListener.Stop();
    }
    if (this.MyListenThread!=null)
    { //如果线程还处于运行状态就关闭它
    if (this.MyListenThread.ThreadState==ThreadState.Running)
    {
    this.MyListenThread.Abort();
    }
    }
    }
    catch(Exception Err)
    {
      MessageBox.Show(Err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    }
    ------------------------------
      

  2.   

    程序补充:
     1) 在程序设计窗体中有两个textBox控件,三个RichTextBox控件,一个Button控件;
     2) textBox1为接受主机的地址;textBox2为姓名;RichTextBox1为将要发送的内容;RichTextBox2为已经接收的内容;RichTextBox3为已经发达的内容;Button1为发送按钮。
      

  3.   

    http://www.cnblogs.com/wayfarer/archive/2004/07/30/28723.html这是一篇用Remoting的解决方案例子,可以参考.
      

  4.   

    小y 做了一个的
    用c#做的还有源码下载
    看他的blog:
    http://tuyile006.cnblogs.com
      

  5.   

    基于sockets类能否实现我提出的功能???
      

  6.   

    Thanks to bitdragon:
    可是我现在不知从哪入手呀!!!
      

  7.   

    Thank to YuNa123: 
    但是找到其它已启动聊天程序的电脑是用什么实现!!!
      

  8.   

    Thanks to BITDRAGON:
    1)如果是第一种方式,请您指点一下思路!!!
      

  9.   

    Thanks to BITDRAGON:
    1)如果是第一种方式,请您指点一下思路,或者举个实例;谢谢!!
      

  10.   

    不好意思.原码是公司的,不能外发。要告我的,没有钱打官司。
    告诉你思路还是可以的.
    其实很简单的,你的程序要分为服务端和客户端,就是server and  client
    server 的工作就是接收client的信息分析目标地址,再转发出去.
    client 的工作就是发送客户消息,当然要选择目标(有目标地址).
    client发送消息的时候其实是发给serve,通过server对消息进行解析,得到目标地址,转发到目的地.
      

  11.   

    Thanks to BITDRAGON:
    请问这种思路具体会用到哪几个通讯类: 比如...
      

  12.   

    tcpclient, tcplistener,NetworkStream 我记的就这些了.
    这三个是必须的.其他的系统类我想不起来了.
    其余的都是自己根据业务需要写的.