晓月_【C#异步服务器】第一天 服务器源代码
来源:互联网 发布:unity3d vr 室内场景 编辑:程序博客网 时间:2024/04/30 18:36
首先,为了让框架更好的适应以后多个项目的开发。
我把网络框架写进了一个DLL里。
XiaoYue_Framework
废话也不多说了。这是第一个版本。
暂时不考虑5000人在线。过2天再出5000人的代码。到时候我找服务器供大家测试。
因为自己是也第一次写。所以我的备注有点多。高手就少喷点了。
好落。要一起学习的加我的Q 1970007869 进群闲聊。 20%技术 80%的闲聊。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace XiaoYue_Framework
{
//晓月服务器框架类。 先实现功能,再量化,然后再优化。
//这是第一步啦。先实现功能才。越简单越好。
public class Server
{
int port = 2222;//设置为默认的值啦。
Socket server;
public void Start()
{
//首先就是服务器的配置问题啦。
Console.WriteLine("服务器开始启动。。。。。。。。");
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//参数为传输协议。我表示都看不懂
//协议写好后,我们需要绑定一下这台服务器啦。当然,跑哪里,就绑定哪里的IP地址。路由器之类的什么鬼。
server.Bind(new IPEndPoint(IPAddress.Any, port));//绑定了服务器的IP啦。自己不知道自己的IP地址。查找以i下吧。IP地址类处理
Console.WriteLine("服务器监听端口号 : " + port + "。。。。。。。。");
server.Listen(10);//最多排10个人队伍。如果没有被连接起的话。
StartAccept();
}
public void StartAccept( )//传递这个数据啦。现在我们不用循环监听啦。
{
Console.WriteLine("服务器开始接受客户端的连接请求。。。。。。。。");
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.Completed += new EventHandler<SocketAsyncEventArgs>(accept_completed);
// 写好这个类之后就可以监听了。
server.AcceptAsync(e);//暂时先不用判断同步处理完毕啦。
}
//处理客户端连接,保存这个数据的啦。处理客户端连接
//主要的功能就是拿到这个客户端连接啦。保存在E里面哦。
public void ProcessAccept(SocketAsyncEventArgs e)
{
//接受客户端有什么用啦?
//我们在这里保存一下连接啦。
Socket kehuduan = e.AcceptSocket;//保存这个连接。然后怎么处理呢这个连接可以发送信息啦。
Console.WriteLine("有客户端连接了哦" + kehuduan.RemoteEndPoint.ToString());//有客户端连接啦。
//然后我们试着发送数据玩完//这个E就不用啦。
}
//想客户端发送测试信息。Hi 晓月 有英文和中文哦。
public void Hi_xiaoyue(Socket kehuduan)
{
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.Completed += new EventHandler<SocketAsyncEventArgs>(IO_Completed);
//我们传递一个BYTE[] 数组进去啦。
byte[] xinxi = Encoding.Default.GetBytes("Hi 晓月, 你好");//用这个工具编码啦
//写入一个新的事件当中。
e.SetBuffer(xinxi , 0 , xinxi.Length);//放置这么多信息进去啦。怎么不直接放进去啦。
kehuduan.SendAsync(e);//异步加载,会回调。就不判断同步信息了。
}
//发送信息。 到时候其他的地方啦。这个是IO完毕的 大家发送了一遍以后再干什么?
//这个是自己发送的信息。
//以后再修改啦。
//这个是判断给客户端发送完信息之后的参数。主要看是不是发送异常。异常就让他下线
public void ProcessSend( SocketAsyncEventArgs e )
{
if (e.SocketError == SocketError.Success)
{
Console.WriteLine("客户端成功接受信息");
}
else
{
Console.WriteLine("客户端没有成功接受信息,不好意思,你要下线了。");
}
}
//这个是异步监听客户端连接的回调方法。
//接受完成了。回调这个方法啦。
public void accept_completed(object sender, SocketAsyncEventArgs e)
{
ProcessAccept(e);
}
public void IO_Completed(object sender, SocketAsyncEventArgs e)
{
if (e.LastOperation == SocketAsyncOperation.Receive)//就是上次的执行号啦。
{
// 到时候要判断是接收信息还是发送信息,不同的回调。可以从他的反馈得到信息
ProcessSend(e);
}
}
}
}
我把网络框架写进了一个DLL里。
XiaoYue_Framework
废话也不多说了。这是第一个版本。
暂时不考虑5000人在线。过2天再出5000人的代码。到时候我找服务器供大家测试。
因为自己是也第一次写。所以我的备注有点多。高手就少喷点了。
好落。要一起学习的加我的Q 1970007869 进群闲聊。 20%技术 80%的闲聊。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace XiaoYue_Framework
{
//晓月服务器框架类。 先实现功能,再量化,然后再优化。
//这是第一步啦。先实现功能才。越简单越好。
public class Server
{
int port = 2222;//设置为默认的值啦。
Socket server;
public void Start()
{
//首先就是服务器的配置问题啦。
Console.WriteLine("服务器开始启动。。。。。。。。");
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//参数为传输协议。我表示都看不懂
//协议写好后,我们需要绑定一下这台服务器啦。当然,跑哪里,就绑定哪里的IP地址。路由器之类的什么鬼。
server.Bind(new IPEndPoint(IPAddress.Any, port));//绑定了服务器的IP啦。自己不知道自己的IP地址。查找以i下吧。IP地址类处理
Console.WriteLine("服务器监听端口号 : " + port + "。。。。。。。。");
server.Listen(10);//最多排10个人队伍。如果没有被连接起的话。
StartAccept();
}
public void StartAccept( )//传递这个数据啦。现在我们不用循环监听啦。
{
Console.WriteLine("服务器开始接受客户端的连接请求。。。。。。。。");
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.Completed += new EventHandler<SocketAsyncEventArgs>(accept_completed);
// 写好这个类之后就可以监听了。
server.AcceptAsync(e);//暂时先不用判断同步处理完毕啦。
}
//处理客户端连接,保存这个数据的啦。处理客户端连接
//主要的功能就是拿到这个客户端连接啦。保存在E里面哦。
public void ProcessAccept(SocketAsyncEventArgs e)
{
//接受客户端有什么用啦?
//我们在这里保存一下连接啦。
Socket kehuduan = e.AcceptSocket;//保存这个连接。然后怎么处理呢这个连接可以发送信息啦。
Console.WriteLine("有客户端连接了哦" + kehuduan.RemoteEndPoint.ToString());//有客户端连接啦。
//然后我们试着发送数据玩完//这个E就不用啦。
}
//想客户端发送测试信息。Hi 晓月 有英文和中文哦。
public void Hi_xiaoyue(Socket kehuduan)
{
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.Completed += new EventHandler<SocketAsyncEventArgs>(IO_Completed);
//我们传递一个BYTE[] 数组进去啦。
byte[] xinxi = Encoding.Default.GetBytes("Hi 晓月, 你好");//用这个工具编码啦
//写入一个新的事件当中。
e.SetBuffer(xinxi , 0 , xinxi.Length);//放置这么多信息进去啦。怎么不直接放进去啦。
kehuduan.SendAsync(e);//异步加载,会回调。就不判断同步信息了。
}
//发送信息。 到时候其他的地方啦。这个是IO完毕的 大家发送了一遍以后再干什么?
//这个是自己发送的信息。
//以后再修改啦。
//这个是判断给客户端发送完信息之后的参数。主要看是不是发送异常。异常就让他下线
public void ProcessSend( SocketAsyncEventArgs e )
{
if (e.SocketError == SocketError.Success)
{
Console.WriteLine("客户端成功接受信息");
}
else
{
Console.WriteLine("客户端没有成功接受信息,不好意思,你要下线了。");
}
}
//这个是异步监听客户端连接的回调方法。
//接受完成了。回调这个方法啦。
public void accept_completed(object sender, SocketAsyncEventArgs e)
{
ProcessAccept(e);
}
public void IO_Completed(object sender, SocketAsyncEventArgs e)
{
if (e.LastOperation == SocketAsyncOperation.Receive)//就是上次的执行号啦。
{
// 到时候要判断是接收信息还是发送信息,不同的回调。可以从他的反馈得到信息
ProcessSend(e);
}
}
}
}
1 0
- 晓月_【C#异步服务器】第一天 服务器源代码
- 第一天:配置tomcat服务器
- 第一天搭建tftp服务器
- web服务器集群-第一天
- 晓月_【晓月全书】大家一起来
- 晓月_【关于UI】
- 晓月_【场景分类】
- 第一天 搭建nfs服务器的使用
- 第一天:samba服务器的搭建
- python开发ftp服务器第一天(pyftpdlib)
- 晓月_【游戏参考】九阴真经
- C#异步TCP服务器完整实现
- c#异步Socket Tcp服务器实现
- C# socket服务器异步监听注意事项
- C# 异步Socket (BeginXXXX)服务器代码
- C# 多线程、异步编程与并发服务器
- C#异步TCP服务器完整实现
- 090615_第一天
- 关于mysql的自增id测试,innodb和myisam下的不同表现
- HBase集群安装-0 环境安装
- 同时在工程中引入了多个第三方jar包,导致的DEX错误
- Scala 正则表达式
- 创建SQLAlchemy的ORM类的基类(二)
- 晓月_【C#异步服务器】第一天 服务器源代码
- 简单工厂模式
- TRS WCM 几处突破点
- Notification(二)
- Android 里面获取屏幕的高度,宽度
- JAVA-抽象工厂模式
- 课时4第二章:运算符
- Android样式开发——style篇
- OC_消息机制