推荐文章

c#去除字符串中的空格,回车,换行符,制表符

c#去除字符串中的空格,回车,换行符,制表符

c#去除字符串中的空格,回车,换行符,制表符
C#监控程序启动和关闭

C#监控程序启动和关闭

C#监控程序启动和关闭using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;using System.Threading;namespace ProcessListener{ class Program { static void Main(stri
C#操作USB口的摄像头

C#操作USB口的摄像头

private const uint BM_CLICK = 0xF5; 鼠标点击的消息,对于各种消息的数值,查API手册,也可用VS2010自带的SPY++ [DllImpt("user32.dll", EntryPoint = "SendMessage", SetLastErr = true, Set = Set.Auto)]private static extern int SendMe
C# FTP操作

C# FTP操作

C# FTP操作
C#文件监控对象FileSystemWatcher

C#文件监控对象FileSystemWatcher

使用C#文件监控对象FileSystemWatcher对文件夹下的删除、修改、新增

Sockets服务器

日期:2018-08-15 点击:1884 来源:PB2.CN

System.Net.Sockets

using iService.SocketParam;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using SocketServer;
namespace iService
{
    public class SocketHost
    {
        private IDictionary<Socket, byte[]> socketClientSesson = new Dictionary<Socket, byte[]>();
        public int Port { get; set; }
        public void Start()
        {
            var socketThread = new Thread(() =>
            {
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint iep = new IPEndPoint(IPAddress.Any, this.Port);
                //绑定到通道上
                socket.Bind(iep);
                //侦听
                socket.Listen(100000);
                //通过异步来处理
                socket.BeginAccept(new AsyncCallback(Accept), socket);
            });
            socketThread.Start();
            Error.WriteToFile("Socket服务器已启动");
        }
        /// <summary>
        /// 链接
        /// </summary>
        /// <param name="ia"></param>
        private void Accept(IAsyncResult ia)
        {
            try
            {
                Socket socket = ia.AsyncState as Socket;
                var client = socket.EndAccept(ia);
                socket.BeginAccept(new AsyncCallback(Accept), socket);
                byte[] buf = new byte[1024];
                this.socketClientSesson.Add(client, buf);
                string sessionId = client.Handle.ToString();
                client.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), client);
                //保存客户端
                //保存完成
                Error.WriteToFile(string.Format("客户端({0})已连接", sessionId));
            }
            catch (Exception ex)
            {
                Error.WriteToFile("监听请求时出错:\r\n" + ex.ToString());
            }
        }
        /// <summary>
        /// 接收信息
        /// </summary>
        /// <param name="ia"></param>
        private void Receive(IAsyncResult ia)
        {
            var client = ia.AsyncState as Socket;
            if (client == null || !this.socketClientSesson.ContainsKey(client))
            {
                return;
            }
            int count = client.EndReceive(ia);
            byte[] buf = this.socketClientSesson[client];
            //byte[] buf = new byte[1024];
            string sessionId = client.Handle.ToString();
            if (count > 0)
            {
                try
                {
                    client.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), client);
                    string context = Encoding.UTF8.GetString(buf, 0, count);
                    Param.AddCache(sessionId, context);
                    ArrayList ai = Param.OutCache(sessionId);
                    foreach (object o in ai)
                    {
                        string s = o.ToString();
                        Error.WriteToFile(string.Format("接收的数据为:{0}", s));
                        this.Response(client, s);
                        Thread.Sleep(1000);
                    }
                }
                catch (Exception ex)
                {
                    Error.WriteToFile(string.Format("接收的数据出错:{0}", ex.ToString()));
                }
            }
            else
            {
                try
                {
                    client.Disconnect(true);
                    this.socketClientSesson.Remove(client);
                    Param.RemoveCache(sessionId);
                    Error.WriteToFile(string.Format("客户端({0})已断开", sessionId));
                }
                catch (Exception ex)
                {
                    Error.WriteToFile(string.Format("客户端已断开出错" + ex.ToString()));
                }
            }
        }
        private void Response(Socket sender, string context)
        {
            SocketRequest request = null;
            JavaScriptSerializer jss = new JavaScriptSerializer();
            request = jss.Deserialize(context, typeof(SocketRequest)) as SocketRequest;
            if (request == null)
            {
                return;
            }

            var typeName = "SocketServer." + request.API + "ResponseManager";
            Error.WriteToFile(string.Format("反射类名为:{0}", typeName));
            Type type = Type.GetType(typeName);
            if (type == null)
            {
                Error.WriteToFile(string.Format("Type反射为空"));
                return;
            }
            var manager = Activator.CreateInstance(type) as IResponseManager;
            manager.Exec(sender, this.socketClientSesson.Select(s => s.Key).ToList(),
                request.Data as IDictionary<string, object>,request.Sign);
        }
    }
}


这篇文档对您是否有帮助?

c#去除字符串中的空格,回车,换行符,制表符

c#去除字符串中的空格,回车,换行符,制表符

c#去除字符串中的空格,回车,换行符,制表符
C#监控程序启动和关闭

C#监控程序启动和关闭

C#监控程序启动和关闭using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;using System.Threading;namespace ProcessListener{ class Program { static void Main(stri
C#操作USB口的摄像头

C#操作USB口的摄像头

private const uint BM_CLICK = 0xF5; 鼠标点击的消息,对于各种消息的数值,查API手册,也可用VS2010自带的SPY++ [DllImpt("user32.dll", EntryPoint = "SendMessage", SetLastErr = true, Set = Set.Auto)]private static extern int SendMe
C# FTP操作

C# FTP操作

C# FTP操作
C#文件监控对象FileSystemWatcher

C#文件监控对象FileSystemWatcher

使用C#文件监控对象FileSystemWatcher对文件夹下的删除、修改、新增