会xiaotie的一个TCP问题
xiaotie,你看我用红色标出来的两句话,这就是一旦掉线,Server就立刻会知道,并触发Disconnect事件。

namespace Communication.Server
{
public class SocketHelper
{
public event EventHandler Disconnected;
public event EventHandler BuildText;
private TcpClient myClient;
private SplitBytes sb;
private byte[] recByte;
#region LoginStatus
private bool loginStatus;
public bool LoginStatus
{
set { loginStatus = value; }
}
#endregion
public SocketHelper(Object myClient)
{
this.myClient = (TcpClient)myClient;
sb = new SplitBytes();
recByte = new byte[1024];
loginStatus = false;
}
public void ReadStream()
{
AsyncCallback GetStreamMsgCallback = new AsyncCallback(myReadCallBack);
myClient.GetStream().BeginRead(recByte, 0, 1024, GetStreamMsgCallback, null);
}
private void myReadCallBack(IAsyncResult ar)
{
int numberOfBytesRead;
try
{
lock (myClient.GetStream())
{
numberOfBytesRead = myClient.GetStream().EndRead(ar);
if (numberOfBytesRead < 1)
{
//If a value less than 1 received that means that client disconnected
myClient.Close();
//raise the Disconnected Event
if (Disconnected != null)
{
EventArgs e = new EventArgs();
Disconnected(null, e);
}
return;
}
}
sb.AddBytes(recByte, numberOfBytesRead);
recByte = new byte[1024];
if (myClient.GetStream().DataAvailable)
{
myClient.GetStream().BeginRead(recByte, 0, recByte.Length, new AsyncCallback(myReadCallBack), myClient.GetStream());
}
else
{
if (BuildText != null)
{
Object obj = SerializationHelper.GetDeserializationObject(sb.ReceiveAllByte);
BuildText(obj, null);
}
sb.Dispose();
if (loginStatus)
{
lock (myClient.GetStream())
{
AsyncCallback GetStreamMsgCallback = new AsyncCallback(myReadCallBack);
myClient.GetStream().BeginRead(recByte, 0, 1024, GetStreamMsgCallback, null);
}
}
}
}
catch
{
myClient.Close();
if (Disconnected != null)
{
EventArgs e = new EventArgs();
Disconnected(null, e);
}
}
}
public void Close()
{
myClient.Close();
}
public void Send(object obj)
{
BinaryWriter writer = new BinaryWriter(myClient.GetStream()); ;
writer.Write(SerializationHelper.GetSerializationBytes(obj));
writer.Flush();
}
}
}
分类:
包包版网络棋牌大厅
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架