C# socket 异步服务端丢失数据
C#通过socket 异步传输数据功能已实现,但网络网速不好的情况下会出现 客户端发送数据成功,但服务端接口不到,重启下服务端有能正常接收数据,请问一下如何才能避免网络不好的情况下数据正常接收?先谢了
一下是我的代码---------------------------------------
服务端代码 用线程调用 Listen()方法
private void Listen()
{
string strIP = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString();
if (strIP.Length < 9)
{
strIP = Dns.GetHostEntry(Dns.GetHostName()).AddressList[1].ToString();
}
IPAddress ip = IPAddress.Parse(strIP);
IPEndPoint ipe = new IPEndPoint(ip, 8889);
sockets = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sockets.Bind(ipe);
sockets.Listen(500);
while (isRun)
{
Control.CheckForIllegalCrossThreadCalls = false;
try
{
allDone.Reset();
sockets.BeginAccept(new AsyncCallback(AcceptCallback), sockets);
allDone.WaitOne();
}
catch
{
}
}
}
private void AcceptCallback(IAsyncResult ar)
{
try
{
allDone.Set();
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar);
StateObject state = new StateObject();
state.workSocket = handler;
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
}
catch
{
}
}
private void ReadCallback(IAsyncResult ar)
{
try
{
string content = string.Empty;
StateObject state = (StateObject)ar.AsyncState;
Socket handler = state.workSocket;
int bytesRead = handler.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(Encoding.Default.GetString(state.buffer, 0, bytesRead));
string info = state.sb.ToString();
}
}
}
catch
{ }
}
客户端能正常发送数据,服务端偶尔会出现接收不到数据。
希望大家能帮我看看代码是不是有什么问题? 最好能够给点参考代码就最好了