ClientSocket.EndConnect(ar);

ClientSocket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(Send_Callback), null);由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。在我的电脑上没有问题,在一台XP SP2上不行。在一台2000 Server上试也不行。
还有时会在EndConnect的时候抛出 10004:一个封锁操作被对 WSACancelBlockingCall 的调用中断网络高手帮忙啊

解决方案 »

  1.   

    Try~Catch看看异常信息到底是个啥~
      

  2.   

    最后一个参数不能为null,改成ClientSocket自身看看。
      

  3.   

    由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。 1.绑定的IP或者端口已经被占用2.绑定的IP或者端口错误
     我遇到的一般就这2个问题……
      

  4.   

            public void Connect_Callback(IAsyncResult ar)
            {
                try
                {
                    ClientSocket.EndConnect(ar);
                    log.Info("连接已创建");
                    Login pkg = new Login();
                    pkg.KeyID = KeyID;
                    byte[] data = pkg.ToByteArray();
                    log.Info("登录包已准备好");
                    ClientSocket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(Send_Callback), null);
                    log.Info("登录包已发送");
                    ClientSocket.BeginReceive(DataBuffer, BufferIndex, BufferSize - BufferIndex, SocketFlags.None, new AsyncCallback(Receive_Callback), null);
                    log.Info("开始接收数据");
                    if (ServerConnected != null) ServerConnected(this, null);
                    log.Info("触发服务器连接成功事件");
                }
                catch (SocketException ex)
                {
                    log.Error("连接服务器时发生Socket异常:(" + ex.ErrorCode + ")" + ex.Message);                if (ServerConnectFailed != null)
                    {
                        ServerConnectFailed(this, null);
                    }            }        }
      

  5.   

    这个不是必需的。如果需要通过这个参数传Socket对象的话,就通过这个参数传。如果不需要的话,也可以不传。
      

  6.   

    问题解决了。        private void StartThread()
            {
                ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    log.Info("试图连接服务器:" + serverIP.ToString() + ":" + serverPort.ToString());
                    ClientSocket.BeginConnect(serverIP, serverPort, new AsyncCallback(Connect_Callback), ClientSocket);
                    Thread.Sleep(1000);            }
                catch (Exception ex)
                {
                    log.Error("连接到服务器时异常:" + ex.Message);
                    if (ServerConnectFailed != null) ServerConnectFailed(this, null);
                }        }加了个Sleep解决了。
    原因我也解释不好,希望会对其它人有帮助。