C# SuperSocket服务端入门

1,新建一个控制台应用程序,.NET版本4.0

2,添加SuperSocket(1.6.1).Binaries\Net40\Debug  目录下的:

SuperSocket的dll文件(

log4net.dll,

SuperSocket.Common.dll,

SuperSocket.SocketBase.dll,

SuperSocket.SocketEngine.dll)到此项目的引用

【你也可以使用日志框架,这里没有使用】

3,添加系统的 
System.Configuration;

System.Configuration.Install;到引用中

4,在默认的Program.cs 代码中 添加 命名空间 
using SuperSocket.Common;
using SuperSocket.SocketBase;
using SuperSocket.SocketEngine;

using SuperSocket.SocketBase.Config;

5,详见代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using SuperSocket.Common;
using SuperSocket.SocketBase;
using SuperSocket.SocketEngine;
using SuperSocket.SocketBase.Config;

namespace WebSocketSeviceConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("service");
            //实例化服务器对象
            AppServer appServer = new AppServer();
            var serverConfig = new ServerConfig();

            //ip: 服务器监听的ip地址。你可以设置具体的地址,也可以设置为下面的值 Any 
            //serverConfig.Ip = "184.56.41.24";

            serverConfig.Port = 8848;
            if (!appServer.Setup(serverConfig))
            { 
                Console.WriteLine("Failed to setup!");
                return;
            }
            if (!appServer.Start())
            {
                Console.WriteLine("Failed to start!");
                return;
            }
            Console.WriteLine("ssssss前置机启动成功!,输入q关闭服务器");
            while (Console.ReadKey().KeyChar != 'q')
            {
                continue;
            }
            appServer.Stop();
            Console.WriteLine("服务器已经关闭");
            Console.ReadKey();
        }
    }
}

首先需要下载DLL类库  

1,打开VS2012,新建一个控制台应用程序,选择.NET4.0版本

2,添加引用    

SuperSocket的dll文件(

SuperSocket.Common.dll,

SuperSocket.SocketBase.dll,

SuperSocket.SocketEngine.dll)到此项目的引用 (版本选4.0)

SuperWebSocket.dll   到此项目的引用

添加 系统的  


System.Configuration;

System.Configuration.Install;  到此项目的引用

添加命名空间:


using SuperSocket.SocketBase;

using SuperWebSocket;

接下来请看实现

1、Player

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WebSocketSeviceConsole
{

    public class Player
    {
        public string sessionID { get; set; }

        public string Name { get; set; }
        public float X { get; set; }

        public float Y { get; set; }

        public float Z { get; set; }
        public Player(string id)
        {
            this.sessionID = id;
            Name = sessionID.Substring(0, 6);
            X = -0.66666F;
            Y = 1.59666F;
            Z = 0;
        }

    }
}

2、MakeDataToString

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WebSocketSeviceConsole
{

    public class MakeDataToString
    {
        public static string PlayerString(Player p)
        {
            return IDstr(p) + Namestr(p) + Xstr(p) + Ystr(p) + Zstr(p);
        }

        public static string IDstr(Player p)
        {
            return "<id>" + p.sessionID + "</id>";
        }

        public static string Namestr(Player p)
        {
            return "<name>" + p.Name + "</name>";
        }

        public static string Xstr(Player p)
        {
            return "<X>" + p.X + "</X>";
        }

        public static string Ystr(Player p)
        {
            return "<Y>" + p.Y + "</Y>";
        }

        public static string Zstr(Player p)
        {
            return "<Z>" + p.Z + "</Z>";
        }
    }
}

3、WebSocketSeviceConsole

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using SuperSocket.SocketBase;
using SuperWebSocket;


namespace WebSocketSeviceConsole
{
    class Program
    {
        static int ClientNum = 0;
        static void Main(string[] args)
        {
            Dictionary<string, Player> PlayerList = new Dictionary<string, Player>();
            List<Player> Player__List = new List<Player>();
            Console.WriteLine("SuperWebSocket(0.8).Source服务器\n 按任意键start the WebSocketServer!");
            Console.ReadKey();
            Console.WriteLine();
            var appServer = new WebSocketServer();
            if (!appServer.Setup(2000))
            {
                Console.WriteLine("Failed to setup!");
                Console.ReadKey();
                return;
            }
            appServer.NewSessionConnected += new SessionHandler<WebSocketSession>(appServer_NewClientConnected);
            appServer.NewMessageReceived += new SessionHandler<WebSocketSession, string>(appServer_NewMessageReceived);
            appServer.SessionClosed += new SessionHandler<WebSocketSession, CloseReason>(appServer_SessionClosed);
            Console.WriteLine();
            if (!appServer.Start())
            {
                Console.WriteLine("Failed to start!");
                Console.ReadKey();
                return;
            }
            Console.WriteLine("服务器启动成功, 按 'q' 退出服务器!");
            while (Console.ReadKey().KeyChar != 'q')
            {
                Console.WriteLine();
                continue;
            }
            appServer.Stop();
            Console.WriteLine();
            Console.WriteLine("The server was stopped!");
            Console.ReadKey();
        }


        static void appServer_NewClientConnected(WebSocketSession session)
        {
            session.Send("第一次给客户端发信息,服务器端: ");
            Player ps = new Player(session.SessionID);
            session.Send(MakeDataToString.PlayerString(ps));
            Console.WriteLine("客户端 :端口" + session.RemoteEndPoint.Port + "连接到服务器了!");
            ClientNum += 1;
            foreach (var ses in session.AppServer.GetAllSessions())
            {
                ses.Send("xxx加入了连接!");
            }
        }

        static void appServer_NewMessageReceived(WebSocketSession session, string message)
        {
            session.Send("欢迎登陆本系统: ");
            Console.WriteLine("有客户端消息" + message);
            Console.WriteLine("客户端数目" + ClientNum.ToString());
            foreach (var ses in session.AppServer.GetAllSessions())
            {
                ses.Send("给所有客户端广播发送的消息广播电台");
            }
        }

        static void appServer_SessionClosed(WebSocketSession session, CloseReason closeRs)
        {
            session.Close();
            Console.WriteLine("客户端" + session.RemoteEndPoint.Port + "断开了连接!");
            ClientNum -= 1;
            Console.WriteLine("客户端数目" + ClientNum.ToString());
        }

    }
}

1、打开VS2012,新建一个windows窗体程序,选择.NET4.0版本

2、添加引用    

SuperSocket的dll文件(

SuperSocket.Common.dll,

SuperSocket.SocketBase.dll,

SuperSocket.SocketEngine.dll)到此项目的引用 (版本选4.0)

SuperWebSocket.dll   到此项目的引用

添加 系统:
System.Configuration;

System.Configuration.Install;  到此项目的引用

3、具体代码实现如下所示(由于项目的特殊性,不能完全展示出来,请见谅):

(1)服务器端:

using SuperSocket.SocketBase.Config;
using SuperWebSocket;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ServerSuperWebSocket
{
    public partial class Form1 : Form
    {
        /// <summary>
        ///2016-8-2  服务器打开及接受消息
        /// </summary>
        ///

        private WebSocketServer appServer = new WebSocketServer();
      

        ServerConfig serverConfig = new ServerConfig
        {
            Port = 2015,//set the listening port
            MaxConnectionNumber = 10000
        };


        public Form1()
        {
            InitializeComponent();
        }

       // private WebSocketServer appServer = WebSocketHelper.get().getAppServer(); //封装之后添加的
        private void Form1_Load(object sender, EventArgs e)
        {
            if (!appServer.Setup(serverConfig)) //Setup the appServer
            {
                System.Windows.Forms.MessageBox.Show("开启服务器失败");
                return;
            }

            if (!appServer.Start())//Try to start the appServer
            {
                System.Windows.Forms.MessageBox.Show("开启服务器失败");
                return;
            }
            //注册事件
            appServer.NewSessionConnected += appServer_NewSessionConnected;//客户端连接
            appServer.NewMessageReceived += appServer_NewMessageReceived;//客户端接收消息
            appServer.SessionClosed += appServer_SessionClosed;//客户端关闭
        }

        void appServer_NewSessionConnected(WebSocketSession session)
        {
            //session.Send("连接成功");
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.Append("连接成功:" + "\n");
            strBuilder.Append("Host:" + session.Host + ";");//服务器的ip
            strBuilder.Append("Uri:" + session.UriScheme + ";");
            strBuilder.Append("Path:" + session.Path + ";");
            strBuilder.Append("CurrentToken:" + session.CurrentToken + ";");
            strBuilder.Append("SessionID:" + session.SessionID + ";");
            strBuilder.Append("Connection" + session.Connection + ";");
            strBuilder.Append("Origin" + session.Origin + ";");
            strBuilder.Append("LocalEndPoint" + session.LocalEndPoint + ";");
            strBuilder.Append("RemoteEndPoint" + session.RemoteEndPoint);
      


        }
        void appServer_NewMessageReceived(WebSocketSession session, string message)
        {
            session.Send("服务端收到了客户端发来的消息");
            //这里判断接收消息
            //session.Send(message);//将消息发送到客户端
           // SessionResponse.get().InitResponseJsonData(message);  //解析数据(将数据保存到数据库中)
            //WebSocketHelper.get().setWebSocketSession(session); //将这个session传给session
            //调用发送消息的类
           // SessionRequest.get().sendUserInfo();

        }
        void appServer_SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
        {
            sessionManager.Remove(session.SessionID.ToString());
            session.Close();
        }
    }
}

(2)客户端(同样需要建立windows程序)

程序如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WebSocket4Net;

namespace ClientSuperWebSocket
{
    public partial class Form1 : Form
    {
        private WebSocket websocket = null;
        private string strSendText = string.Empty;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            websocket = new WebSocket("ws://127.0.0.1:2015");
            WebSocketHelper.get().setWebSocket(websocket);

            websocket.Opened += websocket_Opened;
            websocket.Closed += websocket_Closed;
            websocket.MessageReceived += websocket_MessageReceived;
            websocket.Open();
        }

        private void websocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            //this.listBox1.Invoke(new EventHandler(ShowMessage), e.Message);
            MessageReceivedEventArgs responseMsg = (MessageReceivedEventArgs)e; //接收服务端发来的消息
            string strMsg = responseMsg.Message;
        }

        private void ShowMessage(object sender, EventArgs e)
        {
            this.listBox1.Items.Add(sender.ToString());
        }

        private void websocket_Closed(object sender, EventArgs e)
        {
            //websocket.Send("一个客户端 下线");
        }

        void websocket_Opened(object sender, EventArgs e)
        {
            //websocket.Send("一个客户端 上线");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //strSendText = textBox1.Text.ToString();
            //websocket.Send(strSendText);
            WebSocketRequestHelper.get().Register("18630635489", "123456");
        }

    }
}

猜你喜欢

转载自blog.csdn.net/yelin042/article/details/81120071