目录
一 上一章回顾
二 同步概念
三 异步概念
四 服务器端异步实现
1 开启侦听
2 接收消息
3 发送消息
4 源码展示
5 异常提示
五 调用初始化
六 总结
七 下章预告
一 上一章回顾
一 上一章回顾
二 引入命名空间
三 定义套接字属性
四 定义初始化套接字方法
1 开启监听
2 发送消息
3 接受消息
五 关闭套接字
六 总结
七 下章预告
二 同步概念
同步是阻塞模式,当进程执行某个请求的时候,若该请求需要时间处理才能返回结果,那么这个进程将会阻塞停止,直到收到处理结果才继续执行下方逻辑;
同步是客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。在此期间客户端阻塞等待服务器返回结果,显示在UI上就是屏幕卡顿。
三 异步概念
异步是非阻塞模式,进程不会进阻塞,不管处理结果是否返回,而是直接执行下方业务逻辑。当处理有结果后,系统会通知进程进行处理,这样可以优先处理其他工作,有助于提高执行的效率。 异步就相当于当客户端发送给服务端请求时,在等待服务端响应的时候,客户端执行其他业务逻辑,这样节约了时间,提高了效率。
四 服务器端异步实现
首先,函数声明Async异步关键字,传入端口号。
1 开启侦听
2 接收消息
3 发送消息
4 源码展示
public async void InitSocket(int port)
{
using (ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
ServerSocket.Bind(new IPEndPoint(IPAddress.Any, port));
ServerSocket.Listen(10);
//异步接受客户端连接
var handler = await ServerSocket.AcceptAsync();
while (true)
{
//异步接受消息
var received = await handler.ReceiveAsync(buffer,0);
var response = Encoding.UTF8.GetString(buffer, 0, received);
var eom = "<|EOM|>";
if (response.IndexOf(eom) > -1 /* is end of message */)
{
Trace.WriteLine($"Socket server received message: \\"{response.Replace(eom, "")}\\"");
var ackMessage = "李工你好,我是你十年老粉!<|ACK|>";
var echoBytes = Encoding.UTF8.GetBytes(ackMessage);
await handler.SendAsync(echoBytes, 0);
Trace.WriteLine($"Socket server sent acknowledgment: \\"{ackMessage}\\"");
break;
}
else
Trace.WriteLine("消息不包含结束符号");
}
}
}
5 异常提示
如果收到的消息较大,控制台输出:“消息不包含结束符号!”
Trace.WriteLine("消息不包含结束符号");
五 调用初始化
首先初始化该套接字实力对象,其次调用初始化套接字方法,传入端口号
var server = new Server.ViewModels.ServerViewModel();
server.InitSocket(8080);
六 总结
以上我给大家介绍了同步概念、异步概念、服务器异步实现、调用初始化等内容,我们从中可以了解服务器套接字的工作原理。
七 下章预告
下一章我会教大家客户端套接字异步通信的工作原理。
博主RaymondLeigh:如果您觉得本文为您提供了结局思路或解决了您的实际问题,麻烦您🙏帮忙点赞、收藏、评论、关注一键四连,您的举手之劳将为我写作提供动力源泉!🤞
print('Hello,RaymondLeigh!') # 每日问候,跟大家问好!
🔥精品框架专栏:Prism专栏 WPF专栏
🌞精品前端UI设计专栏:MaterialDesign专栏
💾精品后端数据库专栏:SqlServer专栏 EFCore专栏 Socket专栏
💻精品程序开发专栏 VisualStudio专栏
评论前必须登录!
注册