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

向原来好好的C#程序中加一段异步套接字服务器端代码,结果程序老自己退出,该怎么处理

2012-05-12 
向原来好好的C#程序中加一段异步套接字服务器端代码,结果程序老自己退出,该怎么办?代码如下:C# code publi

向原来好好的C#程序中加一段异步套接字服务器端代码,结果程序老自己退出,该怎么办?
代码如下:

C# code
 public static StateObject state;        public static IPAddress ipAddress = IPAddress.Parse("0.0.0.0");        public static IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 2012);        public static Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);        /// <summary>        /// 应用程序的主入口点。        /// </summary>        [STAThread]        static void Main()        {                      serverSocket.Bind(localEndPoint);            serverSocket.Listen(100);            serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);            MyFlowForm = new FlowMon();            Application.Run(MyFlowForm);                   }        public static void AcceptCallback(IAsyncResult ar)        {            Socket serverSocket = (Socket)ar.AsyncState;            Socket clientSocket = serverSocket.EndAccept(ar);            state = new StateObject();            state.workSocket = clientSocket;            Send("连接服务器成功");            clientSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);        }        public static void ReadCallback(IAsyncResult ar)        {            StateObject state = (StateObject)ar.AsyncState;            Socket clientSocket = state.workSocket;            int bytesRead = clientSocket.EndReceive(ar);            if (bytesRead > 0)            {                String str = Encoding.Unicode.GetString(state.buffer, 0, bytesRead);            }            clientSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);        }        private static void Send(String data)        {            byte[] byteData = Encoding.Unicode.GetBytes(data);            state.workSocket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), state);        }        private static void SendCallback(IAsyncResult ar)        {            try            {                Socket clientSocket = (Socket)ar.AsyncState;                int bytesSent = clientSocket.EndSend(ar);            }            catch (Exception e)            {                Console.WriteLine(e.ToString());            }        }        public class StateObject        {            public Socket workSocket = null;            public const int BufferSize = 1024;            public byte[] buffer = new byte[BufferSize];        }


[解决办法]
C# code
using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.Windows.Forms;using System.Threading;namespace Flowfairy{    class FlowSocket    {        public StateObject state;        public IPAddress ipAddress;        public IPEndPoint localEndPoint;        public Socket serverSocket;        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);//建立socket            serverSocket.Bind(localEndPoint);//将套接字绑定到用于TCP通信的本地0.0.0.0地址和2012端口上            serverSocket.Listen(100);//设置套接字处于监听状态            serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);            //开始接受新连接,获取将处理链接的serverSocket,并将Socket提交给将处理请求的AcceptCallback线程{         }        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;//从异步状态对象中获得State对象和客户套接字                int bytesRead = clientSocket.EndReceive(ar);//从客户套接字读取数据                if (bytesRead > 0)                {                    String str = Encoding.Unicode.GetString(state.buffer, 0, bytesRead);                }                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)//启动异步发送数据,将"connected"编码后发送给客户端        {            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());            }        }    }    public class StateObject    {        public Socket workSocket = null;        public const int BufferSize = 1024;        public byte[] buffer = new byte[BufferSize];    }} 

热点排行