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

C#异步套接字有关问题,程序莫名中断连接

2012-05-13 
C#异步套接字问题,程序莫名中断连接PHP向C#发送信息,C#接收到信息后再向PHP那边发送验证信息,结果已发送验

C#异步套接字问题,程序莫名中断连接
PHP向C#发送信息,C#接收到信息后再向PHP那边发送验证信息,结果已发送验证信息,就提示“您的主机中的软件中止了一个已建立的连接”。代码如下:

C# code
            ipAddress = IPAddress.Parse("0.0.0.0");            localEndPoint = new IPEndPoint(ipAddress, 2012);            this.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            serverSocket.Bind(localEndPoint);            serverSocket.Listen(100);            serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);public StateObject state;        public IPAddress ipAddress;        public IPEndPoint localEndPoint;        public Socket serverSocket;        public static String receive;        public  void ListenFlow()        {            ipAddress = IPAddress.Parse("0.0.0.0");            localEndPoint = new IPEndPoint(ipAddress, 2012);            this.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            serverSocket.Bind(localEndPoint);            serverSocket.Listen(100);            serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);        }        public  void AcceptCallback(IAsyncResult ar)//启动异步接收数据        {            try            {                Socket serverSocket = (Socket)ar.AsyncState;                Socket clientSocket = serverSocket.EndAccept(ar);                state = new StateObject();                state.workSocket = clientSocket;                Send("connected");                this.serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), this.serverSocket);                clientSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);            }            catch (Exception e)            {                MessageBox.Show(e.ToString());            }        }        public  void ReadCallback(IAsyncResult ar)        {            try            {                StateObject state = (StateObject)ar.AsyncState;                Socket clientSocket = state.workSocket;                int bytesRead = clientSocket.EndReceive(ar);                if (bytesRead > 0)                {                   byte[] str = state.buffer;                   Flowfairy.FlowSocket.receive = Convert.ToString(str[0]);                   if (Flowfairy.FlowSocket.receive == "1")                   {                       Send(Flowfairy.FlowSocket.receive);//每次执行这一行,就提示中断连接                   }                }                Thread.Sleep(1);                clientSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);            }            catch (Exception e)            {                MessageBox.Show(e.ToString());            }        }        private  void Send(String data)        {            byte[] byteData = Encoding.UTF8.GetBytes(data);            state.workSocket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), state.workSocket);        }        private  void SendCallback(IAsyncResult ar)        {            try            {                Socket clientSocket = (Socket)ar.AsyncState;                int bytesSent = clientSocket.EndSend(ar);            }            catch (Exception e)            {                MessageBox.Show(e.ToString());            }        }


[解决办法]
PHP是服务器脚本语言,那边没有继续接收的话,链接肯定就断了

热点排行