本帖最后由 heku518 于 2009-10-30 11:05:32 编辑

解决方案 »

  1.   

    本人菜鸟,正好也在做客户端的socket通信,看了下楼主代码,提个意见,不一定对啊
    你btnLogin_Click事件里面,启动了线程thread,方法ServerResponse()
    ServerResponse()
    里面有一句
    if (!Stream.CanRead)
                    {
                        return;
                    }
    stream此时在干嘛?在btnLogin_Click事件中,启动完线程后,同时开始往stream里写数据了!会不会是因为此时主线程正在写stream,ServerResponse()里的if判断直接return了呢?
    建立楼主把btnLogin_Click事件,启动线程后的stream写东西,放到ServerResponse()里试试
      

  2.   

    首先程序结构上的设计实在不敢恭维。
                    Thread thread = new Thread(new ThreadStart(this.StartSocketListen));                thread.Start();
    这里肯定有问题,怎么能实时监听用户的接入???
    正确的方法应该是使用异步回调
    下面是我曾经写的一个服务器里面的代码,你参考一下:
            /// <summary>
            /// 启动服务
            /// </summary>
            /// <returns></returns>
            public void Start() 
            {
                try
                {
                    this._accountManager = new AccountManager();
                    if (this._accountManager.Load())
                    {
                        IPEndPoint endPoin = new IPEndPoint(IPAddress.Any, 3568);
                        this.Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                        this.Listener.Bind(endPoin);
                        this.Listener.Listen(256);
                        this.Listener.BeginAccept(new AsyncCallback(Accept), this.Listener);
                    }
                    else 
                    {
                        System.Windows.Forms.MessageBox.Show("原因:未能加载账户列表。", "启动服务失败!", System.Windows.Forms.MessageBoxButtons.OK);
                        return;
                    }
                }
                catch (Exception ex) { }
            }        /// <summary>
            /// 请求连接进入
            /// </summary>
            /// <param name="ar"></param>
            private void Accept(IAsyncResult ar) 
            {
                try
                {
                    if (this.Listener != null)
                    {
                        Connection conn = new Connection(this, Listener.EndAccept(ar));
                        this._Connections.Add(conn);
                        //继续监听
                        this.Listener.BeginAccept(new AsyncCallback(Accept), this.Listener);
                    }
                }
                catch (Exception ex) { }
            }
      

  3.   

    具体的可以加我msn:[email protected] 讨论。
      

  4.   

    问题已经解决,写程序的时候出现的一个小错误!大括号括错地方了,程序并没有执行代码。SORRY~
      

  5.   

    首先程序结构上的设计实在不敢恭维。 
                    Thread thread = new Thread(new ThreadStart(this.StartSocketListen));                 thread.Start(); 
    这里肯定有问题,怎么能实时监听用户的接入??? 
    【这两句代码是完全没有问题的,我实现的多线程应该是同步的(有请求就创建一个线程,退出则销毁一个进程!),而你做的是异步的功能!对于异步的实现方法我也该了解下!有时间要好好跟你讨论讨论~】
      

  6.   

    我再找相同的东西,只不过是vb.net,而且一直也没找到很好的例子