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

请问一个关于SOCKET异步接受信息的有关问题

2012-05-08 
请教一个关于SOCKET异步接受信息的问题前提 有一个类监听类,用来监听或者说是用来接收数据的。C# codepubli

请教一个关于SOCKET异步接受信息的问题
前提 有一个类监听类,用来监听或者说是用来接收数据的。

C# code
public void StartListening(string ip)        {            serverSK = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Udp);            IPEndPoint iep = new IPEndPoint(IPAddress.Parse(ip), 9095);            try            {                allDone.Reset();                serverSK.BeginAccept(new AsyncCallback(AcceptCallback), serverSK);                allDone.WaitOne();            }            catch            { }        } public void AcceptCallback(IAsyncResult ar)        {            try            {                allDone.Set();                Socket listener = ar.AsyncState as Socket;                Socket handler = listener.EndAccept(ar);                listener.BeginAccept(new AsyncCallback(AcceptCallback), handler);                byte[] buffer = new byte[1024];                SocketHelper helper = new SocketHelper(buffer, handler);                handler.BeginReceive(buffer, 0, 1, SocketFlags.None, new AsyncCallback(Receive), helper);            }            catch            {                //            }        } void Receive(IAsyncResult ia)        {            SocketHelper helper = ia.AsyncState as SocketHelper;            Socket worker = helper.s;            worker.EndReceive(ia);            byte[] buffer = new byte[worker.Available + 1];            worker.Receive(buffer, 1, buffer.Length - 1, SocketFlags.None);            buffer[0] = helper.b[0];            this.sendBackSocket = worker;            //调用事件            this.OnMessageArrival(new AsyncEventArgs(buffer));            worker.BeginReceive(helper.b, 0, 1, SocketFlags.None, new AsyncCallback(Receive), helper);        } /// <summary>        /// 触发消息抵达事件        /// </summary>        /// <param name="e">收到的字节数组</param>        private void OnMessageArrival(AsyncEventArgs e)        {            if (this.receiveEventHandler != null)            {                this.receiveEventHandler(this, e);            }        }


我在Form实例化了它,当我 接受到数据的时候 如何显示在Form中的text中啊?

因为是异步的嘛。而且值在Receive函数中才可以取到。

求请教啊

如何能在值收到的时候返回给Form中的Text啊?

[解决办法]
沙发+Mark+帮顶+如下:
C# code
 /// <summary>        /// 触发消息抵达事件        /// </summary>        /// <param name="e">收到的字节数组</param>        private void OnMessageArrival(AsyncEventArgs e)        {            if (this.receiveEventHandler != null)            {                this.text.BeginInvoke(new AsyncCallback(setText),Encoding.UTF8.GetString((byte[])e));                this.receiveEventHandler(this, e);            }        }public void setText(IAsyncResult ia){} 

热点排行