首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# 网络编程的有关问题(非常紧急)待

2011-12-29 
c# 网络编程的问题(非常紧急)在线等待服务器usingSystemusingSystem.Collections.GenericusingSystem.Co

c# 网络编程的问题(非常紧急)在线等待
服务器
using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Text;
using   System.IO;
using   System.Net;
using   System.Net.Sockets;        
using   System.Windows.Forms;
using   System.Collections;  
using   System.Threading;
using   XuLIeHua;
using   System.Messaging;                  
namespace   网络聊天
{
        public   partial   class   frmServer   :   Form
        {
                public   frmServer()
                {
                        InitializeComponent();
                }
                private   TcpListener   Listen;
                private   Thread   th;
                private   LogText   log;
                private   bool     QUIT;
                private   TcpClient   Client;
                private   static   Dictionary <int,   TcpClient>   s_socket;    
                private   void   button1_Click(object   sender,   EventArgs   e)
                {
                        try
                        {
                                Listen.Start();
                                th.Start();    
                               
                        }
                        catch(Exception   err)
                        {
                                log.LogWriter(err.Message);    
                        }
                }
                private   void   JianKong()
                {
                        try
                        {
                                while   (QUIT   ==   true)


                                {

                                        if   (Listen.Pending()   ==   true)
                                        {
                                                log.LogWriter( "有人链接 ");
                                                Client   =   Listen.AcceptTcpClient();
                                                s_socket.Add(GetId,   Client);
                                                Thread   TongXun   =   new   Thread(new   ThreadStart(TongXunSub));
                                                TongXun.IsBackground   =   true;
                                                TongXun.Start();
                                        }
                                        //Thread.Sleep(100);    
                                }

                                log.LogWriter( "结束 ");
                        }
                        catch   (Exception   err)
                        {
                                log.LogWriter(err.Message);
                        }
                }
                private   int   GetId
                {
                        get
                        {
                                return   s_socket.Count;  
                        }
                }


                private   NetworkStream   SelectIp(string   Ip)
                {
                        try
                        {
                                for   (int   i   =   0;   i   <   s_socket.Count;   i++)
                                {
                                        if   (GetIp(s_socket[i])   ==   Ip)
                                        {
                                                return   s_socket[i].GetStream();    
                                        }
                                }
                                return   null;
                        }
                        catch
                        {
                                return   null;
                        }
                }
                private   string   GetIp(TcpClient   tcpclient)
                {
                        try
                        {
                                EndPoint   ePoint   =   (EndPoint)tcpclient.Client.RemoteEndPoint;
                                string[]   ip   =   ePoint.ToString().Split(new   char[1]   {   ': '   });
                                if   (ip.Length   >   0)
                                {
                                        return   ip[0];
                                }
                                return   null;


                        }
                        catch
                        {
                                return   null;
                        }
                }
                private   void   TongXunSub()
                {
                        try
                        {
                                TcpClient   TcpC   =   Client;
                                NetworkStream   NetStr   =   TcpC.GetStream();    
                                while   (TcpC   !=   null)
                                {
                                        if   (NetStr.DataAvailable   ==   true)
                                        {
                                                MemoryStream   Memory   =   new   MemoryStream();
                                                byte[]   tmp   =   new   byte[1024];
                                                int   Len   =   1;
                                                while   (Len   !=   0)
                                                {
                                                        if   (NetStr.DataAvailable   ==   false)   {   break;   }
                                                        Len   =   NetStr.Read(tmp,   0,   tmp.Length);
                                                        Memory.Write(tmp,   0,   Len);    


                                                }
                                             
                                                NetMsg   Msg   =   (NetMsg)XuLIe.ByteToObj(Memory.ToArray());
                                                if   (Msg.JieShouIp   !=   " ")
                                                {
                                                        NetworkStream   NetWork;
                                                        if   (Msg.JieShouIp   !=   GetIp(TcpC))
                                                        {
                                                                NetWork   =   SelectIp(Msg.JieShouIp);
                                                        }
                                                        else
                                                        {   NetWork   =   NetStr;   }
                                                        log.LogWriter( "发送消息:接收IP "   +   Msg.JieShouIp   +   "   ");
                                                        if   (NetWork   !=   null)
                                                        {
                                                                byte[]   sTmp   =   XuLIe.ObjToByte(Msg);


                                                                NetWork.Write(sTmp,   0,   sTmp.Length);
                                                                sTmp   =   null;
                                                        }
                                                }
                                        }
                                        Thread.Sleep(500);    
                                }
                        }
                        catch   (SocketException   err)
                        {
                                log.LogWriter(err.Message);
                                return;  
                        }
                        catch(Exception   err)
                        {
                                log.LogWriter(err.Message);
                                return;
                        }
                }
                private   void   frmServer_Load(object   sender,   EventArgs   e)
                {
                        log   =   new   LogText( "服务器 ");
                        QUIT   =   true;
                 
                        label1.Text   =   " ";
                        s_socket   =   new   Dictionary <int,   TcpClient> ();          
                        timer1.Enabled   =   true;


                        Listen   =   new   TcpListener(Dns.GetHostAddresses(Dns.GetHostName())[0],   9000);
                        th   =   new   Thread(new   ThreadStart(JianKong));
                        th.IsBackground   =   true;
                        listBox1.Items.Add(Dns.GetHostAddresses(Dns.GetHostName())[0].ToString());      
                }

                private   void   timer1_Tick(object   sender,   EventArgs   e)
                {
                        label1.Text   =   "当前 "   +   s_socket.Count.ToString()   +   "个连接 ";      
                }

                private   void   frmServer_FormClosing(object   sender,   FormClosingEventArgs   e)
                {
                        th.Abort();  
                        QUIT   =   false;
                        Thread.Sleep(500);
                        Application.ExitThread();    
                }
        }
}

[解决办法]
把获取IP的那段代码先注释掉,你就用String IP= "192.168.0.* ";,然后IPAddress.parse(ip)
[解决办法]
1:服务器端开始监听的IP,和端口打印到日志中.
2:客户端连接时,把要连接的服务器IP和端口打印到日志中.
对比.

热点排行