思路

搭建服务器主要为了接收客户端所传来的数据,在学习过程中,整体的搭建逻辑大体分为以下几个步骤:

1.启动线程监听服务端口

2.监听客户端链接并进行处理

3.接收客户端传入的消息

4.向客户端回传(数据的压缩、加密等处理)

5.传输的复杂数据中传输协议的应用

我觉的其中的难点在于如何处理传入的二进制字符,将逻辑处理分配给相关的处理函数

程序分为服务端和客户端,接收和传递规则要对应,否则无法正确解析数据,这里主要介绍服务端的搭建,客户端只要以相关的规则发送、解析数据即可。

代码


创建c#控制台应用程序,在Program.cs文件中,启动socket服务添加端口监视

       //定义监听的服务器IP及端口
        public static string ServerIP = "127.0.0.1";
        ;

        private static Socket ServerSocket;

        static void Main(string[] args)
        {
            //定义socket tcp传输规范
            ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //绑定IP及端口
            ServerSocket.Bind(new IPEndPoint(IPAddress.Parse(ServerIP), port));
            //开始监听 并设置连接数
            ServerSocket.Listen();
            //控制台输出服务器启动成功
             Console.WriteLine("       -----ChatServer {0}:{1} start-----              ", ServerIP, port);
            //创建线程监听链接
            Thread mThread = new Thread(ListenCallBack);
            //开启线程
            mThread.Start();
        }

监听客户端链接,并进行处理,上一步骤中ListenCallBack方法为开启线程执行的服务端方法,该方法使用while循环 一直运行着,用来处理客户端的链接。Sleep函数为让服务端的循环休息一会,以免代码跑的太快逻辑跟不上。

private static void ListenCallBack(object obj)
        {
            while (true)
            {
                Thread.Sleep();

                //客户端socket
                Socket socket = ServerSocket.Accept();
                Client client = new Client();

                //每个客户端访问创建一个新的客户端实例
                ClientSocket clientSocket = new ClientSocket(socket, client);
                client.ClientSocket = clientSocket;

                Console.WriteLine("服务端收到一次访问...");
            }
        }
 public class Client
    {
        private ClientSocket client_Socket;

        public ClientSocket Client_Socket
        {
            get { return client_Socket; }
            set { client_Socket = value; }
        }
    }
   public class ClientSocket
    {
        public ClientSocket(Socket socket, Client client)
        {
          Console.WriteLine("一个用户访问了服务器");
        }
}

现在搭建起了一个简单的服务端,可以进行访问,但却不能接收消息。其中ClientSocket中传入的socket参数,代表的是当前的客户端socket,访问方的信息多半都在里面,数据传输与接收也是通过这个对象来完成的。

处理接收数据

数据通过二进制传递过来以后 使用byte[]进行接收。数据的接收,我们还是要在ClientSocket中进行添加,因为客户端的所有信息包括我们向客户端的传输操作,都在socket对象中。

 socket.BeginReceive(接收到的数组, , 接收到的数组的长度, SocketFlags.None, 接收回调函数, socket);//异步接收客户端socket数据
socket.BeginSend(发送的数组, , 发送的数组长度, SocketFlags.None, 发送回调函数, socket);//向客户端socket发送数据

其中,发送的数组为了数据安全,应该是经过一系列的加密算法后的结果,而前端传递过来的数组,也应该是加密后,然后以相应的顺序解析为我们所需要的协议类型。

c#搭建服务端 准备工作(1)的更多相关文章

  1. CAS 5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明

    CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...

  2. CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端

    CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...

  3. 使用Apache MINA框架搭建服务端

    使用MINA框架搭建服务端步骤: 1.定义一个启动服务的类MinaServer,并实现接口ServletContextListener 2.定义一个处理业务逻辑的类MinaServerHandler, ...

  4. 用“MEAN”技术栈开发web应用(二)express搭建服务端框架

    上一篇我们讲了如何使用angular搭建起项目的前端框架,前端抽象出一个service层来向后端发送请求,后端则返回相应的json数据.本篇我们来介绍一下,如何在nodejs环境下利用express来 ...

  5. 在 Windows Server 上搭建 *** 服务端(转载加亲测)

    转载自:https://diveng.io/build-shadowsocks-server-on-windows-server.html 下面的教程建议大家使用第一种方法安装,说是比较简单.我则使用 ...

  6. Netty搭建服务端的简单应用

    Netty简介 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客 ...

  7. c# 搭建服务端 byte[] 处理(3)

    数据的传输中,为防止数据传输过程中被获取解析 造成数据的不安全,一般都会采取各类的方式对数据进行加密.压缩等操作,在客户端或服务端以相同的算法解析即可获得数据,一定程度上减小了数据在中间过程被获取数据 ...

  8. c# 搭建服务端 传输协议(2)

    在网络的数据传输中,要将需要传输的数据转换为二进制数据后传输,才能被服务端正常的接收,socket传输中,接收到的数据都会被放入byte[]中存放,所以在数据发送前,对二进制的数组进行有规律的排序,才 ...

  9. Swift搭建服务端

    原文:Hello Server Side Swift 作者:Logan Wright 译者:CocoaChina--kmyhy(博客) 自从苹果官方发布了一个 Swift 的 Linux 开源版本之后 ...

随机推荐

  1. Struts2的Stack Context和ValueStack

    1.提到Struts2的传值功能时,经常会见到Stack Context和ValueStack等概念,那么它们到底是什么,有什么作用呢. ValueStack(值栈):Struts2将OGNL上下文设 ...

  2. java中memcached

    http://www.oschina.net/code/snippet_250396_9181

  3. GLFW库文件配置

    VS2012+windows8下面,vs的默认路径在C:\Program Files(x86)\Windows Kits\8.0 下. 将include\GLFW里.h文件加入vs路径Include\ ...

  4. hdu 4597 Play Game(区间dp,记忆化搜索)

    Problem Description Alice and Bob are playing a game. There are two piles of cards. There are N card ...

  5. LINQ查询操作符 LINQ学习第二篇[转]

    一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataCo ...

  6. 传iWatch 将在7月投入生产,10月出货,支持无线充电、触控、測量脉搏

    今天又有关于 iWatch 的传言传出.据路透社的线人消息称,台湾的广达电脑(Quanta Computer Inc.)将于 7 月開始生产 iWatch.10 月出货,估计推出后首年的出货量为 50 ...

  7. React系列(一):React入门

    React简介 1.由来 React是有Facebook开发出来用于构建前端界面的JS组件库,由于其背后的强大背景,使得这款库在技术开发上完全没有问题. 2.React的优势 解决大规模项目开发中数据 ...

  8. SQL SERVER2012 无法连接远程服务器

    SQL SERVER2012 无法连接远程服务器,报"尝试读取受保护的内存"错误. 解决方法: 运行CMD,输入 netsh winsock reset,回车.重启SSMS,搞定.

  9. BZOJ 1087 互不侵犯king

    Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...

  10. 定时器——Cocos2d-x学习历程(十一)

    1.定时器 利用场景.层和精灵等游戏元素,我们可以构建游戏的框架,但是此时的游戏仍然是静止不动的.在一切游戏中,游戏的状态都会随着时间的流逝而改变,同时我们还需要定时进行一些逻辑判断,例如鱼和子弹的碰 ...