-
-
Notifications
You must be signed in to change notification settings - Fork 244
使用入门
Henry edited this page Oct 11, 2019
·
1 revision
组件提供了非常方便的流操作方式,可以让TCP
通讯数据操作和操作内存或文件一样方便。以下通过使用组件构建一个简单HelloWorld
通讯服务。
组件定义服务需要实现一些规则,规则主要是用来控制连接和数据接收处理,具体如下:
public interface IServerHandler
{
void Connecting(IServer server, EventArgs.ConnectingEventArgs e);
void Connected(IServer server, EventArgs.ConnectedEventArgs e);
void Log(IServer server, EventArgs.ServerLogEventArgs e);
void Error(IServer server, EventArgs.ServerErrorEventArgs e);
void SessionReceive(IServer server, SessionReceiveEventArgs e);
void SessionPacketDecodeCompleted(IServer server, EventArgs.PacketDecodeCompletedEventArgs e);
void Disconnect(IServer server, EventArgs.SessionEventArgs e);
void SessionDetection(IServer server, SessionDetectionEventArgs e);
}
这里就不详解了,后面会慢慢用到。
其实组件已经提供了这一接口的基础实现类,如果不是特别需要的情况下没有必要现重新实现。
class Program : ServerHandlerBase
{
private static IServer server;
public static void Main(string[] args)
{
server = SocketFactory.CreateTcpServer<Program>();
//server.Options.DefaultListen.Port =9090;
//server.Options.DefaultListen.Host = "127.0.0.1";
server.Open();
Console.Read();
}
public override void SessionReceive(IServer server, SessionReceiveEventArgs e)
{
var pipeStream = e.Stream.ToPipeStream();
if (pipeStream.TryReadLine(out string line))
{
Console.WriteLine(name);
e.Session.Stream.ToPipeStream().WriteLine("hello " + name);
e.Session.Stream.Flush();
}
base.SessionReceive(server, e);
}
}
以上代码是在IPAddress.Ayn
的9090
端口上构建一个TCP
服务,服务相关处理工作由继承了ServerHandlerBase
的Program
来处理。
通过重写SessionReceive
方法来获取接收的数据处理,以上代码是从当前数据流尝试获取一行字符,如果成功则打印相关信息并响应回去。
日志会显示程序加载的情况,这样一个TCP
服务不编写完成。
为了方便演示,同样也用组件的Client
模式进行调用处理
class Program
{
static void Main(string[] args)
{
TcpClient client = SocketFactory.CreateClient<TcpClient>("127.0.0.1", 9090);
while (true)
{
Console.Write("Enter Name:");
var line = Console.ReadLine();
client.Stream.ToPipeStream().WriteLine(line);
client.Stream.Flush();
var reader = client.Receive();
line = reader.ReadLine();
Console.WriteLine(line);
}
}
}