C#+flash socket 聊天程序(转)



很多人在研究flash的socket中经常会出现一些问题,所以提供一个别人的程序代码出来给大家参考...
 
这是VS2003下的c#程序的主要源代码,经过测试的。不包含一些自动生成的代码。
这些代码是根据一个开源的C# socket程序改编的,而且已经写了比较详细的注释了。

C#源代码
Windows 应用的窗体程序:Form1.cs

C#+flash socket 聊天程序(转)using System;
C#+flash socket 聊天程序(转)
using System.IO;
C#+flash socket 聊天程序(转)
using System.Drawing;
C#+flash socket 聊天程序(转)
using System.Collections;//ArrayList引用到这个命名空间的类
C#+flash socket 聊天程序(转)
using System.ComponentModel;
C#+flash socket 聊天程序(转)
using System.Windows.Forms;
C#+flash socket 聊天程序(转)
using System.Data;
C#+flash socket 聊天程序(转)
using System.Net;
C#+flash socket 聊天程序(转)
using System.Net.Sockets;
C#+flash socket 聊天程序(转)
using System.Threading;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)
namespace ChatServer//服务器端命名空间
C#+flash socket 聊天程序(转)
{
C#+flash socket 聊天程序(转)    
/// <summary>
C#+flash socket 聊天程序(转)    
/// Form1 的摘要说明。
C#+flash socket 聊天程序(转)    
/// </summary>

C#+flash socket 聊天程序(转)    public class Form1 : System.Windows.Forms.Form
C#+flash socket 聊天程序(转)    
{
C#+flash socket 聊天程序(转)        
private int listenport = 9050;//监听端口
C#+flash socket 聊天程序(转)
        private TcpListener listener;//监听者
C#+flash socket 聊天程序(转)
        private ArrayList clients;//所有的client
C#+flash socket 聊天程序(转)
        private Thread processor;//处理线程
C#+flash socket 聊天程序(转)
        private Socket clientsocket;//client套接字
C#+flash socket 聊天程序(转)
        private Thread clientservice;//client的服务
C#+flash socket 聊天程序(转)
        private System.Windows.Forms.ListBox lbClients;
C#+flash socket 聊天程序(转)        
private System.Windows.Forms.Label label1;//显示在线人员的List控件
C#+flash socket 聊天程序(转)

C#+flash socket 聊天程序(转)        
private TcpClient tclient;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
private NetworkStream ns;
C#+flash socket 聊天程序(转)        
private System.Windows.Forms.Button button1;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 必需的设计器变量。
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        private System.ComponentModel.Container components = null;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
public Form1()
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
//
C#+flash socket 聊天程序(转)            
// Windows 窗体设计器支持所必需的
C#+flash socket 聊天程序(转)            
//
C#+flash socket 聊天程序(转)
            InitializeComponent();
C#+flash socket 聊天程序(转)            Thread.CurrentThread.IsBackground 
= true;
C#+flash socket 聊天程序(转)            
//
C#+flash socket 聊天程序(转)            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
C#+flash socket 聊天程序(转)            
//
C#+flash socket 聊天程序(转)
            clients = new ArrayList();//新建一个ArrayList类型用以存储所有的client
C#+flash socket 聊天程序(转)
            processor = new Thread(new ThreadStart(StartListening));//新建一个处理线程
C#+flash socket 聊天程序(转)
            processor.Start();//线程开始
C#+flash socket 聊天程序(转)            
//
C#+flash socket 聊天程序(转)

C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
private void initClient()
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            tclient 
= new TcpClient(Dns.GetHostName(),listenport);
C#+flash socket 聊天程序(转)            ns 
= tclient.GetStream();
C#+flash socket 聊天程序(转)            
C#+flash socket 聊天程序(转)            
//StreamReader sr = new StreamReader(ns); 
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)            
//ns.Write();
C#+flash socket 聊天程序(转)            
//MessageBox.Show("wwwwwwww");
C#+flash socket 聊天程序(转)        
C#+flash socket 聊天程序(转)            
//while()
C#+flash socket 聊天程序(转)
            Thread cthread = new Thread(new ThreadStart(crun));
C#+flash socket 聊天程序(转)            cthread.Start();
C#+flash socket 聊天程序(转)            
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)        
private void crun()
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
//MessageBox.Show("wwwwwwww");
C#+flash socket 聊天程序(转)
            bool state = true;
C#+flash socket 聊天程序(转)            
//bool b = false;
C#+flash socket 聊天程序(转)
            while(state)
C#+flash socket 聊天程序(转)            
{
C#+flash socket 聊天程序(转)                
//MessageBox.Show("wwwwwwww");
C#+flash socket 聊天程序(转)
                string message;
C#+flash socket 聊天程序(转)                
//if(!b)
C#+flash socket 聊天程序(转)                
//{
C#+flash socket 聊天程序(转)                
//    message = "CONN|host";
C#+flash socket 聊天程序(转)                
//    b = !b;
C#+flash socket 聊天程序(转)                
//}
C#+flash socket 聊天程序(转)                
//else
C#+flash socket 聊天程序(转)
                message = "CHAT|test";
C#+flash socket 聊天程序(转)                
byte[] bf = System.Text.Encoding.UTF8.GetBytes(message.ToCharArray());
C#+flash socket 聊天程序(转)                ns.Write(bf, 
0, bf.Length);
C#+flash socket 聊天程序(转)                Thread.Sleep(
2000);
C#+flash socket 聊天程序(转)            }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 清理所有正在使用的资源。
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        protected override void Dispose( bool disposing )
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
C#+flash socket 聊天程序(转)                
int c = clients.Count;
C#+flash socket 聊天程序(转)                
for(int n=0; n<c; n++)
C#+flash socket 聊天程序(转)                
{
C#+flash socket 聊天程序(转)                    Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                    cl.Sock.Close();
C#+flash socket 聊天程序(转)                    cl.CLThread.Abort();
C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)            
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)            
//client.Close();
C#+flash socket 聊天程序(转)
            listener.Stop();
C#+flash socket 聊天程序(转)            processor.Abort();
C#+flash socket 聊天程序(转)            
if( disposing )
C#+flash socket 聊天程序(转)            
{
C#+flash socket 聊天程序(转)                
if (components != null
C#+flash socket 聊天程序(转)                
{
C#+flash socket 聊天程序(转)                    components.Dispose();
C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)            }

C#+flash socket 聊天程序(转)            
base.Dispose( disposing );
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
Windows Form Designer generated code
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 开始监听
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        private void StartListening()
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)            IPAddress ipAddress 
= Dns.Resolve(Dns.GetHostName()).AddressList[0];
C#+flash socket 聊天程序(转)            
//IPAddress ipAddress = IPAddress.Parse("192.168.0.132");
C#+flash socket 聊天程序(转)

C#+flash socket 聊天程序(转)            
C#+flash socket 聊天程序(转)            label1.Text
=ipAddress.ToString();
C#+flash socket 聊天程序(转)            IPEndPoint ipLocalEndPoint 
= new IPEndPoint(ipAddress, listenport);
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)            listener 
= new TcpListener(ipLocalEndPoint);
C#+flash socket 聊天程序(转)            listener.Start();
C#+flash socket 聊天程序(转)            
while (true
C#+flash socket 聊天程序(转)            
{
C#+flash socket 聊天程序(转)                
try
C#+flash socket 聊天程序(转)                
{
C#+flash socket 聊天程序(转)                    Socket s 
= listener.AcceptSocket();//接收一个套接字
C#+flash socket 聊天程序(转)
                    clientsocket = s;//赋值给clientsocket
C#+flash socket 聊天程序(转)
                    clientservice = new Thread(new ThreadStart(ServiceClient));//为新进client服务建立线程
C#+flash socket 聊天程序(转)
                    clientservice.Start();//线程开始
C#+flash socket 聊天程序(转)
                }

C#+flash socket 聊天程序(转)                
catch(Exception e)//如果出现异常则打控制台打印到屏幕
C#+flash socket 聊天程序(转)
                {
C#+flash socket 聊天程序(转)                    Console.WriteLine(e.ToString() );
C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)            }

C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 给一个客户提供服务
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        private void ServiceClient()
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            Socket client 
= clientsocket;//赋值给client
C#+flash socket 聊天程序(转)
            bool keepalive = true;
C#+flash socket 聊天程序(转)            
bool s;
C#+flash socket 聊天程序(转)            
while (keepalive)
C#+flash socket 聊天程序(转)            
{
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                Byte[] buffer 
= new Byte[1024];//一个1024bits的缓存区
C#+flash socket 聊天程序(转)
                try
C#+flash socket 聊天程序(转)                
{
C#+flash socket 聊天程序(转)                    client.Receive(buffer);
C#+flash socket 聊天程序(转)                }
 
C#+flash socket 聊天程序(转)                
catch(SocketException ex) 
C#+flash socket 聊天程序(转)                

C#+flash socket 聊天程序(转)                    
//客户端退出     
C#+flash socket 聊天程序(转)                    
//MessageBox.Show(ex.ToString());
C#+flash socket 聊天程序(转)
                    string leaveName="";
C#+flash socket 聊天程序(转)                    
int remove = 0;
C#+flash socket 聊天程序(转)                    
bool found = false;
C#+flash socket 聊天程序(转)                    
int c = clients.Count;
C#+flash socket 聊天程序(转)                    
//从client的ArrayList中查找有没有相符的client
C#+flash socket 聊天程序(转)                    
//有的话就作好删掉的准备
C#+flash socket 聊天程序(转)
                    for(int n=0; n<c; n++)
C#+flash socket 聊天程序(转)                    
{
C#+flash socket 聊天程序(转)                        Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                        
if(cl.Host==client.RemoteEndPoint)
C#+flash socket 聊天程序(转)                        
{
C#+flash socket 聊天程序(转)                            leaveName 
= cl.Name;
C#+flash socket 聊天程序(转)                            remove 
= n;
C#+flash socket 聊天程序(转)                            found 
= true;
C#+flash socket 聊天程序(转)                            lbClients.Items.Remove(cl);
//List控件中删除这个client
C#+flash socket 聊天程序(转)
                            break;
C#+flash socket 聊天程序(转)                        }

C#+flash socket 聊天程序(转)                    }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                    
if(found)
C#+flash socket 聊天程序(转)                    
{
C#+flash socket 聊天程序(转)                        
for(int n=0; n<c; n++)
C#+flash socket 聊天程序(转)                        
{
C#+flash socket 聊天程序(转)                            Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                            
//MessageBox.Show( "GONE|"+leaveName);
C#+flash socket 聊天程序(转)
                            SendToClient(cl, "GONE|"+leaveName);
C#+flash socket 聊天程序(转)                        }

C#+flash socket 聊天程序(转)                    
C#+flash socket 聊天程序(转)                        clients.RemoveAt(remove);
//从clients的ArrayList里面删掉要当前要退出的client
C#+flash socket 聊天程序(转)
                        client.Close();//关闭套接口
C#+flash socket 聊天程序(转)
                        keepalive = false;//keepalive=false则这个线程服务完毕
C#+flash socket 聊天程序(转)
                    }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                
string clientcommand = System.Text.Encoding.UTF8.GetString(buffer);//把得到的数据用ASCII的编码形式读出解决中文的显示问题
C#+flash socket 聊天程序(转)

C#+flash socket 聊天程序(转)                label1.Text
=clientcommand;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                
string[] tokens = clientcommand.Split(new Char[]{'|'});//以|号划分的命令数据
C#+flash socket 聊天程序(转)
                Console.WriteLine(clientcommand);
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                
if (tokens[0== "CONN")//连接命令消息
C#+flash socket 聊天程序(转)
                {
C#+flash socket 聊天程序(转)                    
//给现有的client发送新进一个client的消息
C#+flash socket 聊天程序(转)
                    for(int n=0; n<clients.Count; n++
C#+flash socket 聊天程序(转)                    
{
C#+flash socket 聊天程序(转)                        Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                        SendToClient(cl, 
"JOIN|" + tokens[1]);
C#+flash socket 聊天程序(转)                    }

C#+flash socket 聊天程序(转)                    
C#+flash socket 聊天程序(转)                    
//新加一个client
C#+flash socket 聊天程序(转)
                    EndPoint ep = client.RemoteEndPoint;
C#+flash socket 聊天程序(转)                    Client c 
= new Client(tokens[1], ep, clientservice, client);
C#+flash socket 聊天程序(转)                    clients.Add(c);
C#+flash socket 聊天程序(转)                    
C#+flash socket 聊天程序(转)                    
//给每个client发一个当前所有client的列表消息
C#+flash socket 聊天程序(转)                    
//string message = "LIST|" + GetChatterList();
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                    
//new byte(0)
C#+flash socket 聊天程序(转)                    
//byte b = 0;
C#+flash socket 聊天程序(转)

C#+flash socket 聊天程序(转)                    
string message = "LIST|"+"asdasd";
C#+flash socket 聊天程序(转)                    
//MessageBox.Show(message.Length +"="+message);
C#+flash socket 聊天程序(转)
                    SendToClient(c, message);
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                    
//MessageBox.Show(message);
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)                    
//服务器List控件新加这个client
C#+flash socket 聊天程序(转)
                    lbClients.Items.Add(c);
C#+flash socket 聊天程序(转)                    
C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)                
else
C#+flash socket 聊天程序(转)                    
if (tokens[0== "CHAT")//聊天命令消息
C#+flash socket 聊天程序(转)
                {
C#+flash socket 聊天程序(转)                    
//给每个client发送聊天消息
C#+flash socket 聊天程序(转)
                    for(int n=0; n<clients.Count; n++)
C#+flash socket 聊天程序(转)                    
{
C#+flash socket 聊天程序(转)                        Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                        SendToClient(cl, clientcommand);
C#+flash socket 聊天程序(转)                    }

C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)                
else
C#+flash socket 聊天程序(转)                    
if (tokens[0== "PRIV"//私聊命令消息
C#+flash socket 聊天程序(转)
                {
C#+flash socket 聊天程序(转)                    
C#+flash socket 聊天程序(转)                    
string destclient = tokens[2];//目标client
C#+flash socket 聊天程序(转)
                    for(int n=0; n<clients.Count; n++
C#+flash socket 聊天程序(转)                    
{
C#+flash socket 聊天程序(转)                        Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                        
if(cl.Name.CompareTo(tokens[2]) == 0)//给目标client发聊天消息
C#+flash socket 聊天程序(转)
                            SendToClient(cl, clientcommand);
C#+flash socket 聊天程序(转)                        
if(cl.Name.CompareTo(tokens[1]) == 0)//给自己发聊天消息
C#+flash socket 聊天程序(转)
                            SendToClient(cl, clientcommand);
C#+flash socket 聊天程序(转)                    }

C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)                
else
C#+flash socket 聊天程序(转)                    
if (tokens[0== "GONE")//离开命令消息
C#+flash socket 聊天程序(转)
                {
C#+flash socket 聊天程序(转)                    
int remove = 0;
C#+flash socket 聊天程序(转)                    
bool found = false;
C#+flash socket 聊天程序(转)                    
int c = clients.Count;
C#+flash socket 聊天程序(转)                    
//从client的ArrayList中查找有没有相符的client
C#+flash socket 聊天程序(转)                    
//有的话就作好删掉的准备
C#+flash socket 聊天程序(转)
                    for(int n=0; n<c; n++)
C#+flash socket 聊天程序(转)                    
{
C#+flash socket 聊天程序(转)                        Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                        SendToClient(cl, clientcommand);
C#+flash socket 聊天程序(转)                        
if(cl.Name.CompareTo(tokens[1]) == 0)
C#+flash socket 聊天程序(转)                        
{
C#+flash socket 聊天程序(转)                            remove 
= n;
C#+flash socket 聊天程序(转)                            found 
= true;
C#+flash socket 聊天程序(转)                            lbClients.Items.Remove(cl);
//List控件中删除这个client
C#+flash socket 聊天程序(转)
                        }

C#+flash socket 聊天程序(转)                    }

C#+flash socket 聊天程序(转)                    
if(found)
C#+flash socket 聊天程序(转)                        clients.RemoveAt(remove);
//从clients的ArrayList里面删掉要当前要退出的client
C#+flash socket 聊天程序(转)
                    client.Close();//关闭套接口
C#+flash socket 聊天程序(转)
                    keepalive = false;//keepalive=false则这个线程服务完毕
C#+flash socket 聊天程序(转)
                }

C#+flash socket 聊天程序(转)                
else
C#+flash socket 聊天程序(转)                
{
C#+flash socket 聊天程序(转)                    
//MessageBox.Show(clientcommand);
C#+flash socket 聊天程序(转)
                    for(int n=0; n<clients.Count; n++)
C#+flash socket 聊天程序(转)                    
{
C#+flash socket 聊天程序(转)                        Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                        SendToClient(cl, 
"-");
C#+flash socket 聊天程序(转)                    }

C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)            }
 
C#+flash socket 聊天程序(转)        
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 发送消息到指定的client
C#+flash socket 聊天程序(转)        
/// </summary>
C#+flash socket 聊天程序(转)        
/// <param name="cl">client</param>
C#+flash socket 聊天程序(转)        
/// <param name="message">消息</param>

C#+flash socket 聊天程序(转)        private void SendToClient(Client cl, string message)
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
try
C#+flash socket 聊天程序(转)            
{
C#+flash socket 聊天程序(转)                
//MessageBox.Show(message);
C#+flash socket 聊天程序(转)
                message += "0";
C#+flash socket 聊天程序(转)                
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(message.ToCharArray());
C#+flash socket 聊天程序(转)                buffer[buffer.Length 
-2= 0;
C#+flash socket 聊天程序(转)                cl.Sock.Send(buffer,buffer.Length,
0);
C#+flash socket 聊天程序(转)            }

C#+flash socket 聊天程序(转)            
catch(Exception)//如果有异常则退出
C#+flash socket 聊天程序(转)
            {
C#+flash socket 聊天程序(转)                
//MessageBox.Show(message);
C#+flash socket 聊天程序(转)
                clients.Remove(cl);
C#+flash socket 聊天程序(转)                lbClients.Items.Remove(cl.Name 
+ " : " + cl.Host.ToString());
C#+flash socket 聊天程序(转)                
for(int n=0; n<clients.Count; n++)
C#+flash socket 聊天程序(转)                
{
C#+flash socket 聊天程序(转)                    Client cl1 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                    SendToClient(cl1, 
"GONE|"+cl.Name);
C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)                cl.Sock.Close();
C#+flash socket 聊天程序(转)                cl.CLThread.Abort();
C#+flash socket 聊天程序(转)                
C#+flash socket 聊天程序(转)            }

C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 获得所有聊天者的列表
C#+flash socket 聊天程序(转)        
/// 中间以"|"符号间隔
C#+flash socket 聊天程序(转)        
/// </summary>
C#+flash socket 聊天程序(转)        
/// <returns></returns>

C#+flash socket 聊天程序(转)        private string GetChatterList()
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
string chatters = "";
C#+flash socket 聊天程序(转)            
for(int n=0; n<clients.Count; n++)
C#+flash socket 聊天程序(转)            
{
C#+flash socket 聊天程序(转)                Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                chatters 
+= cl.Name;
C#+flash socket 聊天程序(转)                
//MessageBox.Show(cl.Name.Length +"=" +cl.Name);
C#+flash socket 聊天程序(转)                
//chatters += "welcome";
C#+flash socket 聊天程序(转)
                chatters += "|";
C#+flash socket 聊天程序(转)                
//MessageBox.Show(cl.Name);
C#+flash socket 聊天程序(转)
                
C#+flash socket 聊天程序(转)            }

C#+flash socket 聊天程序(转)            
//chatters += "欢迎你的到来";
C#+flash socket 聊天程序(转)            
//MessageBox.Show(chatters);
C#+flash socket 聊天程序(转)
            chatters.Trim(new char[]{'|'});
C#+flash socket 聊天程序(转)        
C#+flash socket 聊天程序(转)            
return chatters;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)            
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 应用程序的主入口点。
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        [STAThread]
C#+flash socket 聊天程序(转)        
static void Main() 
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            Application.Run(
new Form1());
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
private void Form1_Load(object sender, System.EventArgs e)
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)        
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
private void lbClients_SelectedIndexChanged(object sender, System.EventArgs e)
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)        
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
private void button1_Click(object sender, System.EventArgs e)
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
//initClient();
C#+flash socket 聊天程序(转)
            if(clients.Count > 0)
C#+flash socket 聊天程序(转)            
{
C#+flash socket 聊天程序(转)                
int c = clients.Count;
C#+flash socket 聊天程序(转)                
for(int n=0; n<c; n++)
C#+flash socket 聊天程序(转)                
{
C#+flash socket 聊天程序(转)                    
string message = "CHAT|..";
C#+flash socket 聊天程序(转)            
C#+flash socket 聊天程序(转)                    Client cl 
= (Client)clients[n];
C#+flash socket 聊天程序(转)                    SendToClient(cl, message);
C#+flash socket 聊天程序(转)                }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)            }

C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)    }

C#+flash socket 聊天程序(转)}

C#+flash socket 聊天程序(转)


Class 类程序:Client.cs

C#+flash socket 聊天程序(转)using System;
C#+flash socket 聊天程序(转)
using System.Threading;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)
namespace ChatServer //定义命名空间
C#+flash socket 聊天程序(转)
{
C#+flash socket 聊天程序(转)    
using System.Net.Sockets;
C#+flash socket 聊天程序(转)    
using System.Net;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)    
/// <summary>
C#+flash socket 聊天程序(转)    
/// Client 的摘要说明。
C#+flash socket 聊天程序(转)    
/// </summary>

C#+flash socket 聊天程序(转)    public class Client
C#+flash socket 聊天程序(转)    
{
C#+flash socket 聊天程序(转)        
private Thread clthread;//client的线程
C#+flash socket 聊天程序(转)
        private EndPoint endpoint;//终端
C#+flash socket 聊天程序(转)
        private string name;//client的名称
C#+flash socket 聊天程序(转)
        private Socket sock;//套接口
C#+flash socket 聊天程序(转)

C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 构造函数,初始化所有的私有变量
C#+flash socket 聊天程序(转)        
/// </summary>
C#+flash socket 聊天程序(转)        
/// <param name="_name">名称</param>
C#+flash socket 聊天程序(转)        
/// <param name="_endpoint">终端</param>
C#+flash socket 聊天程序(转)        
/// <param name="_thread">线程</param>
C#+flash socket 聊天程序(转)        
/// <param name="_sock">套接口</param>

C#+flash socket 聊天程序(转)        public Client(string _name, EndPoint _endpoint, Thread _thread, Socket _sock)
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
// TODO: 在此处添加构造函数逻辑
C#+flash socket 聊天程序(转)
            clthread = _thread;
C#+flash socket 聊天程序(转)            endpoint 
= _endpoint;
C#+flash socket 聊天程序(转)            name 
= _name;
C#+flash socket 聊天程序(转)            sock 
= _sock;
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 重载:转成字串
C#+flash socket 聊天程序(转)        
/// </summary>
C#+flash socket 聊天程序(转)        
/// <returns>返回终端加上client名称</returns>

C#+flash socket 聊天程序(转)        public override string ToString()
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
return endpoint.ToString()+ " : " + name;
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 获取和设置线程
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        public Thread CLThread
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
get{return clthread;}
C#+flash socket 聊天程序(转)            
set{clthread = value;}
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 获取和设置终端
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        public EndPoint Host
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
get{return endpoint;}
C#+flash socket 聊天程序(转)            
set{endpoint = value;}
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 获取和设置client名称
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        public string Name
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
get{return name;}
C#+flash socket 聊天程序(转)            
set{name = value;}
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)        
/// <summary>
C#+flash socket 聊天程序(转)        
/// 获取和设置套接口
C#+flash socket 聊天程序(转)        
/// </summary>

C#+flash socket 聊天程序(转)        public Socket Sock
C#+flash socket 聊天程序(转)        
{
C#+flash socket 聊天程序(转)            
get{return sock;}
C#+flash socket 聊天程序(转)            
set{sock = value;}
C#+flash socket 聊天程序(转)        }

C#+flash socket 聊天程序(转)    }

C#+flash socket 聊天程序(转)}


flash源代码
这是flash的代码,代码比较简单,没有写什么注释。
聊天.fla

C#+flash socket 聊天程序(转)function OnConnect(success) {
C#+flash socket 聊天程序(转) 
if (success) {
C#+flash socket 聊天程序(转)  trace(
"Connection succeeded!");
C#+flash socket 聊天程序(转)  isConn 
= true;
C#+flash socket 聊天程序(转)  socket.send(
"CONN|"+userNameIt.text);
C#+flash socket 聊天程序(转)  userList.addItem('所有人');
C#+flash socket 聊天程序(转) }
 else {
C#+flash socket 聊天程序(转)  trace(
"Connection failed!");
C#+flash socket 聊天程序(转) }

C#+flash socket 聊天程序(转)}

C#+flash socket 聊天程序(转)
function OnData(src) {
C#+flash socket 聊天程序(转) 
// 此处是您的语句
C#+flash socket 聊天程序(转)
 trace(src)
C#+flash socket 聊天程序(转) strArray 
= src.split('|');
C#+flash socket 聊天程序(转) 
C#+flash socket 聊天程序(转) temp 
= strArray[0];
C#+flash socket 聊天程序(转) trace(strArray.length
+'\t'+strArray);
C#+flash socket 聊天程序(转) 
if (temp == 'LIST') {
C#+flash socket 聊天程序(转)  userList.removeAll();
C#+flash socket 聊天程序(转)  
for (i=1; i<strArray.length; i++{
C#+flash socket 聊天程序(转)   userList.addItem(strArray[i]);
C#+flash socket 聊天程序(转)  }

C#+flash socket 聊天程序(转) }
 else if (temp == 'JOIN') {
C#+flash socket 聊天程序(转)  userList.addItem(strArray[
1]);
C#+flash socket 聊天程序(转)  smgText.text 
+= strArray[1+ '进来了···'+'\n';
C#+flash socket 聊天程序(转) }
 else if (temp == 'CHAT') {
C#+flash socket 聊天程序(转)  smgText.text 
+= strArray[1]+'\n';
C#+flash socket 聊天程序(转) }
 else if (temp == 'PRIV') {
C#+flash socket 聊天程序(转)  smgText.text 
+= strArray[strArray.length-1]+'\n';
C#+flash socket 聊天程序(转)  
break;
C#+flash socket 聊天程序(转) }
 else if (temp == 'GONE') {
C#+flash socket 聊天程序(转)  
for (var i = 0; i<userList.length; i++{
C#+flash socket 聊天程序(转)   
if (userList.getItemAt(i).label == strArray[1]) {
C#+flash socket 聊天程序(转)    smgText.text 
+= userList.getItemAt(i).label + '离开了···'+'\n';
C#+flash socket 聊天程序(转)    userList.removeItemAt(i);
C#+flash socket 聊天程序(转)   }

C#+flash socket 聊天程序(转)  }

C#+flash socket 聊天程序(转) }
 else if (strArray[1== 'CHAT') {
C#+flash socket 聊天程序(转)  smgText.text 
+= strArray[2]+'\n';
C#+flash socket 聊天程序(转) }

C#+flash socket 聊天程序(转) temp 
= "";
C#+flash socket 聊天程序(转) smgText.vPosition 
= smgText.maxVPosition;
C#+flash socket 聊天程序(转)}

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)connectBtn.onRelease 
= function() {
C#+flash socket 聊天程序(转) socket 
= new XMLSocket();
C#+flash socket 聊天程序(转) socket.onConnect 
= OnConnect;
C#+flash socket 聊天程序(转) socket.onData 
= OnData;
C#+flash socket 聊天程序(转) 
//
C#+flash socket 聊天程序(转)
 if (!socket.connect("192.168.0.132"9050)) {
C#+flash socket 聊天程序(转)  trace(
"Connection failed!");
C#+flash socket 聊天程序(转) }

C#+flash socket 聊天程序(转)}
;
C#+flash socket 聊天程序(转)
/////////////////////////////////////////
C#+flash socket 聊天程序(转)
sendMsgBtn.onRelease = function() {
C#+flash socket 聊天程序(转) 
if (msgIt.text != '') {
C#+flash socket 聊天程序(转)  
if (userList.selectedItem == undefined || userList.selectedItem.label == '所有人' || userList.selectedItem.label == userNameIt.text) {
C#+flash socket 聊天程序(转)   socket.send(
"CHAT|"+userNameIt.text+' 说:'+msgIt.text);
C#+flash socket 聊天程序(转)  }
 else if (!privateCheckBox.selected) {
C#+flash socket 聊天程序(转)   socket.send(
"CHAT|"+userNameIt.text+' 对 '+userList.selectedItem.label+' 说:'+msgIt.text);
C#+flash socket 聊天程序(转)  }
 else {
C#+flash socket 聊天程序(转)   socket.send(
"PRIV|"+userNameIt.text+'|'+userList.selectedItem.label+'|'+userNameIt.text+' 悄悄的对 '+userList.selectedItem.label+' 说:'+msgIt.text);
C#+flash socket 聊天程序(转)  }

C#+flash socket 聊天程序(转) }

C#+flash socket 聊天程序(转) msgIt.text 
= '';
C#+flash socket 聊天程序(转)}
;
C#+flash socket 聊天程序(转)disconnectBtn.onRelease 
= function() {
C#+flash socket 聊天程序(转) isConn 
= false;
C#+flash socket 聊天程序(转) socket.send(
"GONE|"+userNameIt.text);
C#+flash socket 聊天程序(转) socket.close();
C#+flash socket 聊天程序(转)}
;
C#+flash socket 聊天程序(转)
function init() {
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转) connected
=false;
C#+flash socket 聊天程序(转) 
C#+flash socket 聊天程序(转) smgText.text 
= '';
C#+flash socket 聊天程序(转) temp 
= '';
C#+flash socket 聊天程序(转)}

C#+flash socket 聊天程序(转)init();
C#+flash socket 聊天程序(转)
//连接到服务器
C#+flash socket 聊天程序(转)
var isConn:Boolean = false;
C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)myListener 
= new Object();
C#+flash socket 聊天程序(转)myListener.onKeyDown 
= function () {
C#+flash socket 聊天程序(转)
if(Key.getCode() == 13)
C#+flash socket 聊天程序(转)sendMsgBtn.onRelease();
C#+flash socket 聊天程序(转)}

C#+flash socket 聊天程序(转)
C#+flash socket 聊天程序(转)Key.addListener(myListener);
C#+flash socket 聊天程序(转)



本文转自钢钢博客园博客,原文链接http://www.cnblogs.com/xugang/archive/2007/12/04/982084.html,如需转载请自行联系原作者
上一篇:SharePoint 服务应用程序管理-PowerShell


下一篇:多进程不能共享全局变量 | 手把手教你入门Python之一百零六