c#搭建服务端 准备工作(1)
思路
搭建服务器主要为了接收客户端所传来的数据,在学习过程中,整体的搭建逻辑大体分为以下几个步骤:
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)的更多相关文章
- CAS 5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明
CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...
- CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端
CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...
- 使用Apache MINA框架搭建服务端
使用MINA框架搭建服务端步骤: 1.定义一个启动服务的类MinaServer,并实现接口ServletContextListener 2.定义一个处理业务逻辑的类MinaServerHandler, ...
- 用“MEAN”技术栈开发web应用(二)express搭建服务端框架
上一篇我们讲了如何使用angular搭建起项目的前端框架,前端抽象出一个service层来向后端发送请求,后端则返回相应的json数据.本篇我们来介绍一下,如何在nodejs环境下利用express来 ...
- 在 Windows Server 上搭建 *** 服务端(转载加亲测)
转载自:https://diveng.io/build-shadowsocks-server-on-windows-server.html 下面的教程建议大家使用第一种方法安装,说是比较简单.我则使用 ...
- Netty搭建服务端的简单应用
Netty简介 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客 ...
- c# 搭建服务端 byte[] 处理(3)
数据的传输中,为防止数据传输过程中被获取解析 造成数据的不安全,一般都会采取各类的方式对数据进行加密.压缩等操作,在客户端或服务端以相同的算法解析即可获得数据,一定程度上减小了数据在中间过程被获取数据 ...
- c# 搭建服务端 传输协议(2)
在网络的数据传输中,要将需要传输的数据转换为二进制数据后传输,才能被服务端正常的接收,socket传输中,接收到的数据都会被放入byte[]中存放,所以在数据发送前,对二进制的数组进行有规律的排序,才 ...
- Swift搭建服务端
原文:Hello Server Side Swift 作者:Logan Wright 译者:CocoaChina--kmyhy(博客) 自从苹果官方发布了一个 Swift 的 Linux 开源版本之后 ...
随机推荐
- 指定端口号,多线程扫描局域网内IP地址
小白第一次发博客,请各路大神不要喷,有错的地方还请不吝啬指教,谢谢....... 因为注释基本上已经说清楚啦,在这里就不多说什么啦,知识不够怕误人子弟 # -*- coding:utf-8 -*-im ...
- PBM文件格式
PBM是一种单色位图文件,常用于打印机,由于需要下面对PBM文件格式进行分析. 每个文件的开头两个字节(ASCII码)作为文件描述子,可以理解为文件头.具体如下: 头 类型 编码 P1 位图 ASCI ...
- shell script 零碎知识
1.test命令的测试功能 -e 文件名是否存在 -f 文件名是否存在且为文件 -d 文件名是否存在且为目录 范例1 检查/dmtsai是否存在,存在输出 exist 不存在输出 Not ...
- SQL Server带游标的SQL
DECLARE test_cursor CURSOR FOR SELECT ID FROM dbo.T_BD_Restaurant WHERE id <> '0AAB2E55-79F8-4 ...
- 图片和提交servlet的相对和绝对路径
xx.jsp在根目录下,图片的路径为:<img height="33" src="images/enter.gif" width="148&qu ...
- Codeforces 235E
Codeforces 235E 原题 题目描述:设\(d(n)\)表示\(n\)的因子个数, 给定\(a, b, c\), 求: \[\sum_{i=1}^{a} \sum_{j=1}^{b} \su ...
- hdu 4740
题目链接 老虎左拐,老鼠右拐,碰到不能走的拐一次,如果还不能走就停下,自己走过的不能走,求相遇的坐标或-1 一个停下之后,另一个还可以走 #include <cstdio> #includ ...
- Redis事务和分布式锁
Redis事务 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行.Redis事务的实现需要用到 MUL ...
- auto_ptr 要点解析
今天看了auto_ptr类的用法,又仔细看了看C++标准库中的符合标准的auto_ptr类别的实作,觉得自己基本上理解了auto_ptr的原理,下面就我的心得写几句,有不正确的地方,希望多多指教. 1 ...
- MediaController
前言 本章内容是android.widget.MediaController,版本为Android 2.3 r1,翻译来自"唐明",再次感谢"唐明" !期待你一 ...