求助StreamSocket严重丢包

小数点666 2018-07-30 11:21:20
最近项目需要,要在uwp平台上实现文件的发送与接收,通过streamsocket实现通信的时候 ,发现会出现严重的丢包现象,基础代码如下
public class BaseSocket
{
public StreamSocket Socket;
protected string RemotePort = "10000";
private bool isloop = true;
private uint maxSize = 1024 * 60+5;
protected bool IsReceive = true;
public Action<byte[]> OnReceiveData;
private DataReader reader;
public void Init()
{
reader = new DataReader(Socket.InputStream);
}
public virtual void Start()
{
IsReceive = true;
isloop = true;
Task.Run(() =>
{
while(isloop)
{
Read();
}
});
}
public async void Write(byte[] data)
{
try
{
if (Socket != null)
{
using (DataWriter writer = new DataWriter(Socket.OutputStream))
{
writer.ByteOrder = ByteOrder.LittleEndian;
writer.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
writer.WriteBytes(data);
await writer.StoreAsync();
writer.DetachStream();
}
}
}
catch (Exception e)
{

}
}
private async void Read()
{
try
{
reader.ByteOrder = ByteOrder.LittleEndian;
reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
reader.InputStreamOptions = InputStreamOptions.Partial;
await reader.LoadAsync(maxSize);
while(reader.UnconsumedBufferLength>0)
{
byte[] data = new byte[reader.UnconsumedBufferLength];
reader.ReadBytes(data);
OnReceiveData?.Invoke(data);
}
}
catch (Exception e)
{

}
}
public void Close()
{
IsReceive = false;
isloop = false;
reader.Dispose();
if (Socket!=null)
{
Socket.Dispose();
Socket = null;
}
}
}

public class Client:BaseSocket
{
private string ipAddress = "10.10.2.65";
public Action OnConnected;
public Client(string ip)
{
Socket = new StreamSocket();
this.ipAddress = ip;
}
public override async void Start()
{
HostName serverHost = new HostName(ipAddress);
await Socket.ConnectAsync(serverHost, RemotePort);
OnConnected?.Invoke();
base.Start();
}
}


public class Server:BaseSocket
{
// private Queue<KeyValuePair<string, StreamSocket>> ClientQueue = new Queue<KeyValuePair<string, StreamSocket>>();
private StreamSocketListener server;
public override async void Start()
{
server = new StreamSocketListener();
server.ConnectionReceived += Server_ConnectionReceived;
HostName hname = new HostName("10.10.2.157");
await server.BindEndpointAsync(hname, "10000");
}

private void Server_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
if (Socket != null)
{
Close();
}
Socket = args.Socket;
Init();
base.Start();
// ClientQueue.Enqueue(new KeyValuePair<string, StreamSocket>(s.Information.RemoteAddress.CanonicalName, s));
}
public void CloseServer()
{
server.ConnectionReceived -= Server_ConnectionReceived;
server.Dispose();
if(Socket!=null)
{
Close();
}
}
}
...全文
110 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧