推荐文章

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对文件夹下的删除、修改、新增

C# Socket通讯

日期:2018-07-05 点击:1500 来源:PB2.CN

using iClass;

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对文件夹下的删除、修改、新增