http://vod.km2000.com/xxxx/socket.rar
1:程序关闭不了。
2:服务端与多客户端,不知道服务端怎么指定与其中某个连接通信。
3:服务端怎么给全部客户端通信。
各位大哥,小弟菜,代码在上面,麻烦各位大哥帮忙改正帖出来或者发到我邮件里[email protected]
非常感谢!!!

解决方案 »

  1.   

    1、程序关闭不了是因为退出时没关闭线程。
    应先定义 private Thread pThread;

    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    try
    {
    if(pThread!=null)
    if(pThread.IsAlive)
    pThread.Abort();
    sk.Close();

    }
    catch{}
    }
      

  2.   

    晕了
    关闭程序的时候线程没关
    一会我机器的CPU就彪到100%
    ================================================================
    此帖通过csdn小助手回复。
        CSDN小助手是使用vb.net编写的CSDN论坛脱机“外挂”,她能够在
    脱离IE的情况下使用Csdn论坛。程序只加载最核心的数据,所以显示更
    快,产生的流量更小。    下载地址:http://qqwwee.com/csdn.rar
    ================================================================
      

  3.   

    1:程序关闭不了。
    ---------------------
    把代码贴出来,看看哪里错了2、服务端与多客户端,不知道服务端怎么指定与其中某个连接通信。
    ------------------------------
    通过Accept方法返回的socket已经是点对点连接了,这是服务端已经已具体客户端连接(TCP方式)3:服务端怎么给全部客户端通信。
    ---------------------------------
    记录所有客户端的ip,端口,一一请求连接(tcp),或广播(udp)
      

  4.   

    http://vod.km2000.com/xxxx/socket.rar
    打不开
      

  5.   

    private void accept()
    {
    while(true)
    {
    try
    {
    k=sk.Accept();
    this.listBox2.Items.Add(k.RemoteEndPoint.ToString());
    Thread pThread = new Thread(new ThreadStart(receive));
    pThread.Start();
    }
    catch{}
    }
    }关键这里
    k=sk.Accept();
    this.listBox2.Items.Add(k.RemoteEndPoint.ToString());
    你为什么不把k放在数组里呢,让k数组和listBox2的对应起来,这样一个客户端就一个socket链接,对要说话的客户端交流就用特定的链接不就OK呢。你的问题错在,k是可变的,当客户端A链接时,k负责和A链接,B链接是,k负责和B链接,和A负责链接的线掉了。
      

  6.   

    2和3的实现方法太多,我说下我的思路:客户端发信息给服务器段时先发ip,这样就知是哪个客户端发的,而服务器段应做成多线程,若有新的ip发出请求就新开一条线程做通信。3可以通过服务器端的接受ip的记录进行发送。
      

  7.   

    LZ很幽默
    private void start()
    {
    IPAddress ip=getip();
    IPEndPoint xx=new IPEndPoint(ip,338);
    sk=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    byte[] by=new byte[100];
    sk.Bind(xx);
    sk.Listen(10);
            Thread pThread = new Thread(new ThreadStart(accept));
    pThread.Start();
    } private void accept()
    {
    while(true)
    {
    try
    {
    k=sk.Accept();
    this.listBox2.Items.Add(k.RemoteEndPoint.ToString());
    Thread pThread = new Thread(new ThreadStart(receive));
    pThread.Start();
    }
    catch{}
    }
    } private void receive()
    {
    while(true)
    {
    byte[] by=new byte[1024];
    k.Receive(by);
    string a=System.Text.Encoding.Default.GetString(by);
    this.listBox1.Items.Add(a);
    }
    }
      

  8.   

    没有这样写无限循环的
    private void accept()
    {
    while(true)
    {
    try
    {
    k=sk.Accept();
    this.listBox2.Items.Add(k.RemoteEndPoint.ToString());
    Thread pThread = new Thread(new ThreadStart(receive));
    pThread.Start();
    }
    catch{}
    }
    }还有这个
    private void receive()
    {
    while(true)
    {
    byte[] by=new byte[1024];
    k.Receive(by);
    string a=System.Text.Encoding.Default.GetString(by);
    this.listBox1.Items.Add(a);
    }
    }
      

  9.   

    LZ
    参考这个
    http://blog.csdn.net/zhiang75/archive/2004/08/16/75915.aspx
      

  10.   

    问题解决了吗?我有例子。[email protected]