求大侠,silverlight做的socket服务端数据量大的时候自动关掉……急求解,成分感谢

sdkdxrc 2011-09-21 04:03:22
我的代码:
监听:try
{

// 初始化 socket , 然后与端口绑定, 然后对端口进行监听
_listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_listener.NoDelay = true;
_listener.SendBufferSize = ConstParameter.BUFFER_SIZE;
_listener.ReceiveBufferSize = ConstParameter.BUFFER_SIZE;
_listener.Bind(new IPEndPoint(IPAddress.Any, 4513)); // Silverlight 2.0 使用 Socket 只能连接 4502-4534 端口
_listener.Listen(100);

while (true)
{
// 重置 ManualResetEvent,由此线程来控制 ManualResetEvent,其它到这里来的线程请等待
// 为求简单易懂,本例实际上只有主线程会在这里循环运行
Thread.Sleep(500);
_connectDone.Reset();

// 开始接受客户端传入的连接
_listener.BeginAccept(new AsyncCallback(OnClientConnect), null);

// 阻止当前线程,直到当前 ManualResetEvent 调用 Set 发出继续信号
_connectDone.WaitOne();
}
}
catch (SocketException ex)
{

}

收客户端数据:
ClientSocketPacket client = async.AsyncState as ClientSocketPacket;
int count = 0;
try
{
// 完成接收数据的这个异步操作,并返回接收的字节数

if (client.Socket.Connected)
count = client.Socket.EndReceive(async);
WriAccept("接收到数据", count);

}
catch (SocketException ex)
{
//MessageBox.Show(ex.Message.ToString());
WriException("接收函数异常1");
HandleException(client, ex);

}
// 把接收到的数据添加进收到的字节集合内
// 本例采用UTF8编码,中文占用3字节,英文占用1字节,缓冲区为32字节
// 所以如果直接把当前缓冲区转成字符串的话可能会出现乱码,所以要等接收完用户发送的全部信息后再转成字符串
foreach (byte b in client.Buffer.Take(count))
{
if (b == 0) continue; // 如果是空字节则不做处理

client.ReceivedByte.Add(b);
}

// 如果该 Socket 在网络缓冲区中没有排队的数据 并且 接收到的数据中有自定义的结束符时
if (client.Socket.Connected && client.Socket.Available == 0)//&& receivedString.Contains(_endMarker)
{

#region 发送信息
try
{
string jsonString = Encoding.UTF8.GetString(client.ReceivedByte.ToArray());
ChatMessage msg = JsonConvert.DeserializeObject<ChatMessage>(jsonString);
if (string.IsNullOrEmpty(msg.SenderIPAndPort))
{
msg.SenderIPAndPort = client.Socket.RemoteEndPoint.ToString();//得到发送者的IP和端口号
}
msg.Sendtime = DateTime.Now;
SendM = msg;
//发送信息
client.ReceivedByte.Clear();//清空以准备下次接收
//SendMsg(msg);
SendChatth = new Thread(new ThreadStart(threadSendMsg));
SendChatth.IsBackground = true;
SendChatth.Start();
Thread.Sleep(100);

}
catch (Exception ex)
{
MessageBox.Show("aaa");
}
finally
{


}
#endregion
}

try
{
// 继续开始接收客户端传入的数据
if (client.Socket.Connected)
client.Socket.BeginReceive(client.Buffer, 0, client.Buffer.Length, 0, new AsyncCallback(OnDataReceived), client);
}
catch (SocketException ex)
{
WriException("接收函数异常2");
HandleException(client, ex);
}
...全文
35 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,534

社区成员

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

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

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