- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试进行异步套接字通信,并希望服务器保留所有已连接套接字的列表,以便他可以向它们广播消息。
首先,我从msdn Asynchronous Socket Server中获取示例,并对其进行了一些改动,以使它们不会关闭套接字。 (只需删除.shutdown和.Close命令)
但是这样做似乎会使客户陷入“接收部分”。
这是我对msdn示例所做的更改:
客户:
仅更改了ReceiveCallback(),因此它处于无休止的接收循环中:
private static void ReceiveCallback(IAsyncResult ar)
{
try
{
// Retrieve the state object and the client socket
// from the asynchronous state object.
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
// Read data from the remote device.
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
// There might be more data, so store the data received so far.
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
// Get the rest of the data.
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback), state);
}
else
{
// All the data has arrived; put it in response.
if (state.sb.Length > 1)
{
response = state.sb.ToString();
Console.WriteLine(state.sb.ToString());
}
// Signal that all bytes have been received.
receiveDone.Set();
// Get the rest of the data.
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback), state);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
//handler.Shutdown(SocketShutdown.Both);
//handler.Close();
最佳答案
当套接字关闭时,EndReceive仅返回0。您的客户端永远不会设置receiveDone句柄,因为服务器从不关闭套接字。当接收到数据时或在连接终止时调用回调。
您需要检测消息的结尾(就像您链接的示例一样)。
例如。 (您链接的代码的修改后的版本)
content = state.sb.ToString();
if (content.IndexOf("<EOF>") > -1) {
// All the data has been read from the
// client. Display it on the console.
Console.WriteLine("Read {0} bytes from socket. \n Data : {1}",
content.Length, content );
// Echo the data back to the client.
Send(handler, content);
{ // NEW
// Reset your state (persist any data that was from the next message?)
// Wait for the next message.
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}
} else {
// Not all data received. Get more.
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}
关于c# - 异步套接字-与C#中的永久套接字的双工通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26003863/
我有一个示例服务来测试 WCF net.tcp 通信。这是一个非常简单的服务,它所做的只是为客户端订阅服务,然后调用回调 channel 来通知所有连接的客户端有关广播消息的信息。该服务托管在 IIS
我对选择什么解决方案有疑问.. 我有一个正在运行的服务器,它正在运行一个可以从网站接收订单的服务。 几个客户端(远程计算机)以某种方式连接到该服务器。 我真的很想将 WCF 用于所有通信,但不确定是否
我有常规的 net.tcp WCF 服务客户端和常规的 net.tcp duplex(即带有回调)WCF 服务客户端。我已经实现了一些逻辑,以在服务出现故障时不断地重新实例化连接。 它们的创建方式完全
嗨,在双工模式下运行 WCF 的服务存在很大问题。 它泄漏内存(不多,但每天大约 80MB),在内存分析器与服务一起运行 24 小时后,我发现大部分内存位于 byte[] 中。引用相当困惑,但我大多数
我即将开始为现有的 WCF 服务构建一个 iPad 客户端,该服务当前通过 Duplex channel 回调进行通信,并定期将轻量级数据传输对象推送到客户端。我计划使用单点触摸来做到这一点。 我知道
你好 也许这看起来很荒谬,但这至少对我来说是个问题 我编写了双工 WCF 服务,在我的服务中我需要获得事件的客户端服务并保存它们,当发生特殊事件时我调用特定的客户端并为其发送一些值。所以我定义字典并在
我正在开发一个 .NET 应用程序,它可以使位于 Internet 上任何位置(通常在 NAT 后面)的计算机对能够在彼此之间并行交换消息。我对可能的解决方案进行了一些研究,得出的结论是 WCF 双工
有javascript双工数据的解决方案吗?我不介意是否使用闪光灯。我只需要发送和接收文本。 该解决方案必须适用于 FireFox 3.6+。 最佳答案 这里的一个常用技术是保持两个连接。您通过发布
我们正处于定义基于 WWSAPI 的客户端-服务器架构的开始阶段。 我们的一项服务应该允许客户端根据特定条件连接和订阅一些数据更新。然后应在创建或更新时通过从服务器到客户端的回调来传送此数据。 在 W
我们正在开发一个与 Windows 服务对话的 Web 应用程序(两者都将在 .Net 中开发)。这些调用可以是简单的 CRUD 操作或订阅操作。你能否请不同的替代设置这两个应用程序之间的通信。我可以
我有一个双工 WCF 服务,它在神奇的 10 个代理实例化之后挂起。客户端的具体错误是: “System.TimeoutException:发送到 net.tcp://localhost:8080/R
我正在使用 ninject 和 wcf 将参数注入(inject)服务类。我现在需要为双工服务执行此操作,但我不确定如何继续。 目前,我的客户端使用 DuplexChannelFactory 调用双工
再次更新赏金,因为我真的需要知道如何让它发挥作用,或者明确回答为什么它不会。 I've added an alternative explanation of the problem here. 让双
我有一个 Windows 服务,可以将雷达枪的速度读数记录到数据库中。此外,我将该服务设为 WCF 服务器。我有一个订阅服务的表单和一个 CF 客户端,只要有满足特定标准的读数就会被回调。 这原则上有
我有以下问题。我在写聊天软件。客户端/服务器机制基于 WCF 的 DualHttpBinding。这意味着,如果用户发送消息,服务器会通知发送消息的房间中的所有客户端。 我想确保,如果客户的应用程序崩
在我遇到的几个论坛帖子中,有人说, netTCP cannot use port 80, so there will be firewall issue If I use it for web. 如果
我使用双工模式开发 WCF 服务并使用 nettcpbinding。我使用.NET 4.5。我只有一个客户端和一个服务器,它们之间有很多逻辑。客户端总是第一个开始与服务器通信。我希望服务器可以在 WC
我正在开发连接到 WCF 4.0 双工服务以实现某种平面文件处理的 ASP.NET 4.0 Webforms 客户端应用程序。当用户在 Page_Load 事件上进入页面时,我为客户端订阅了双工服务,
我使用 SocketIO4Net用于连接到 Socket.IO使用 C#,但是当我尝试向客户端发出对象时,我的 C# 应用程序突然关闭(我有一个 MVC3 项目) 我阅读了事件查看器,发现有 3 个错
我是一名优秀的程序员,十分优秀!