• SocketAsyncEventArgs Socket Echo Server


    
    namespace Microshaoft
    {
        using System;
        using System.Text;
        using System.Net;
        using System.Net.Sockets;
        using System.ServiceModel.Channels;
        class EchoServer
        {
            Socket server;
            public EchoServer(IPEndPoint localPoint)
            {
                server = new Socket
                                (
                                    localPoint.AddressFamily
                                    , SocketType.Stream
                                    , ProtocolType.Tcp
                                );
                server.Bind(localPoint);
                server.Listen(5);
                accept_async();
            }
            private void accept_async()
            {
                var accept = new SocketAsyncEventArgs();
                accept.Completed += accept_Completed;
                server.AcceptAsync(accept);
            }
            int i = 0;
            void accept_Completed(object sender, SocketAsyncEventArgs e)
            {
                accept_async();
                var client = e.AcceptSocket;
                e.UserToken = i ++;
                e.Completed -= accept_Completed;
                e.Completed += receive_Completed;
                var buffer = new byte[1024];
                e.SetBuffer(buffer, 0, buffer.Length);
                client.ReceiveAsync(e);
            }
            void receive_Completed(object sender, SocketAsyncEventArgs e)
            {
                var client = sender as Socket;
                if (e.BytesTransferred == 0)
                {
                    Console.WriteLine("socket is closed");
                    client.Close();
                }
                else
                {
                    //client.Send(e.Buffer, e.BytesTransferred, SocketFlags.None);
                    byte[] buffer = new byte[e.BytesTransferred];
                    Buffer.BlockCopy(e.Buffer, 0, buffer, 0, buffer.Length);
                    string s = BitConverter.ToString(buffer);
                    //s = Encoding.ASCII.GetString(buffer);
                    Console.WriteLine("===={0}UserToken: [{1}]{0}Bytes Transferred:[{2}]{0}Data:[{3}]{0}====", "\r\n", e.UserToken, e.BytesTransferred, s);
                    //Console.WriteLine(s);
                    client.ReceiveAsync(e);
                }
            }
        }
    }
    namespace ConsoleApplication
    {
        using System;
        using System.Net;
        using Microshaoft;
            /// <summary>
            /// Class1 的摘要说明。
            /// </summary>
        public class Class1
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            //[STAThread]
            static void Main(string[] args)
            {
                //
                // TODO: 在此处添加代码以启动应用程序
                //
                IPAddress ipa;
                IPAddress.TryParse("127.0.0.1", out ipa);
                EchoServer x = new EchoServer(new IPEndPoint(ipa, 8180));
                Console.WriteLine("Hello World");
                Console.WriteLine(Environment.Version.ToString());
                Console.ReadLine();
            }
        }
    }
    
    
  • 相关阅读:
    jsonview插件的常见使用方法整理
    有哪些可以节省chrome内存的扩展插件?
    js得到时间戳(10位数)
    html模板引擎jade的使用
    js获取url参数,操作url参数
    追加window.onload函数
    解决jquery与zepto等其它库冲突兼容的问题
    centos 搭建web平台
    简易web服务器(npm)
    js函数调用与声明 (for时注意)
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/1411217.html
Copyright © 2020-2023  润新知