现在的位置: 首页 > 综合 > 正文

最简单的多人聊天程序(.net socket )

2012年12月30日 ⁄ 综合 ⁄ 共 4784字 ⁄ 字号 评论关闭
/********************************ChatServer:*************************************************/

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

using System.Threading;
using System.Net.Sockets;
using System.Net;
namespace Chat_Server
{
 
/// <summary>
 
/// Form1 的摘要说明。
 
/// </summary>

 public class Form1 : System.Windows.Forms.Form
 
{
  
/// <summary>
  
/// 必需的设计器变量。
  
/// </summary>

  private System.ComponentModel.Container components = null;

  
static int listenport=6666;
  Socket clientsocket;
  
private System.Windows.Forms.ListBox lbClients;
  ArrayList clients;
  
private System.Windows.Forms.Button button1;
  Thread clientservice;
  
private System.Windows.Forms.Label label1;
  Thread threadListen;

  
public Form1()
  
{
   
   InitializeComponent();

  }


  
/// <summary>
  
/// 清理所有正在使用的资源。
  
/// </summary>

  protected override void Dispose( bool disposing )
  
{
   
if( disposing )
   
{
    
    
if(clientservice != null)
    
{
     clientservice.Abort();
    }

    
if(threadListen != null)
    
{
     
try
     
{
      threadListen.Abort();
     }

     
catch(Exception ex)
     
{
      threadListen 
= null;
     }

    }
    

    
if (components != null
    
{
     components.Dispose();
    }

   }

   
base.Dispose( disposing );
   
  }


  
Windows 窗体设计器生成的代码

  
/// <summary>
  
/// 应用程序的主入口点。
  
/// </summary>

  [STAThread]
  
static void Main() 
  
{
   Application.Run(
new Form1());
  }


  
private void StartListening() 
  

    TcpListener listener 
= new TcpListener(listenport);
    listener.Start();
   label1.Text 
= "listening.";
   
while (true
   
{
    
try
    
{
    
     Socket s 
= listener.AcceptSocket(); 
     clientsocket 
= s; 
     clientservice 
= new Thread(new ThreadStart(ServiceClient)); 
     clientservice.Start(); 
    }

    
catch(Exception ex)
    
{
     MessageBox.Show(
"listening Error: "+ex.Message);
    }

   }
   
  }

  
private void ServiceClient() 
  

   Socket client 
= clientsocket; 
   
bool keepalive = true


   
while (keepalive) 
   

    Byte[] buffer 
= new Byte[1024]; 
    
int bufLen = 0;
    
try
    
{
     bufLen 
= client.Available ;
     
     client.Receive(buffer,
0,bufLen,SocketFlags.None); 
     
if(bufLen==0)
      
continue;    
    }

    
catch(Exception ex)
    
{
     MessageBox.Show(
"Receive Error:"+ex.Message);
     
return;
    }

    
    
string clientcommand = System.Text.Encoding.ASCII.GetString(buffer).Substring(0,bufLen); 

    
string[] tokens = clientcommand.Split(new Char[]{'|'}); 
    Console.WriteLine(clientcommand); 

    
if (tokens[0== "CONN"
    

     
for(int n=0; n<clients.Count;n++)
     

      Client cl 
= (Client)clients[n]; 
      SendToClient(cl, 
"JOIN|" + tokens[1]); 
     }

     EndPoint ep 
= client.RemoteEndPoint; 
     Client c 
= new Client(tokens[1], ep, clientservice, client); 
     
     
string message = "LIST|" + GetChatterList() +"\r\n"
     SendToClient(c, message); 

     clients.Add(c); 


     lbClients.Items.Add(c); 


    }

    
if (tokens[0== "CHAT"
    

     
for(int n=0; n<clients.Count;n++)
     

      Client cl 
= (Client)clients[n]; 
      SendToClient(cl, clientcommand); 
     }

    }

    
if (tokens[0== "PRIV"
    

     
string destclient = tokens[3]; 
     
for(int n=0; n<clients.Count;n++)
     

      Client cl 
= (Client)clients[n]; 
      
if(cl.Name.CompareTo(tokens[3]) == 0
       SendToClient(cl, clientcommand); 
      
if(cl.Name.CompareTo(tokens[1

抱歉!评论已关闭.