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 开源版本之后 ...
随机推荐
- Swift笔记01
变量使用var 来声明,常量是所有let ,变量名没什么限制 中文表情都可以 ,一般还是使用英文. var str = "luoshuai " //swift语句后面不需要; l ...
- C++ Primer第四版 15.9 再谈文本查询 程序实现
编程过程中发现书本中的示例程序并不完全,某些地方存在错误,现已改正并添加少许注释.. 1 #include<iostream> 2 #include<fstream> #inc ...
- SQL Server 分离与附加数据库
前期准备: 创建数据库 create database Studio on primary (name ='Studio',filename ='E:\Studio.mdf'), ...
- 动态规划-Burst Balloons
Burst Balloons Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it ...
- Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.
Scenario : 这个问题是我的存储过程中用到临时表时发生的. 应该是sql server 服务器的排序规则 (SQL_Latin1_General_CP1_CI_AS ) 与数据库的排序规则(C ...
- JS中如何使用Cookie
1.关于JS设置Cookie的说明 在Javascript脚本里,一个cookie 实际就是一个字符串属性.当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称 ...
- Object.prototype.toString.call() 区分对象类型(判断对象类型)
在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组. ...
- java中memcached
http://www.oschina.net/code/snippet_250396_9181
- Magento WebServices SOAP API 创建和使用
首先 SOAP 简介: http://baike.baidu.com/view/1695890.htm?fromtitle=SOAP 然后简单介绍下Magento API.Magento API干啥用 ...
- Docker简单介绍
Docker简单介绍 Docker是一个能够把开发的应用程序非常方便地部署到容器的开源引擎.由Docker公司团队编写,基于Apache 2.0开源授权协议发行.Docker的主要目的例如以下: 提供 ...