- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当读取未完成时,读取缓冲区有问题。
如果接收到的 XML 数据是有效的,那么我没有问题。但是,当接收到的 XML 数据不正确时,我正在等待数据的第二部分,然后出现错误。
我的代码如下:
int currentDataSize = socket.EndReceive(iar);
string currentData = convertToString(buffer, currentDataSize);
if (IsValidXml(currentData))
{
//Here I am parsing the xml data and writing into the sql db.
runParseWorker(currentData);
//Here I am sending the xml-data to all clients.
runSendWorker(currentData);
//Here I am calling the BeginRecieve Method again.
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,
new AsyncCallback(dataRecievedCallback), null);
}
else
{
//It gives error when I use offset..
socket.BeginReceive(buffer, currentDataSize, buffer.Length, SocketFlags.None,
new AsyncCallback(dataRecievedCallback), buffer);
}
如何获取其余数据以及如何正确使用偏移量?
我收到这个错误:
specified argument was out of the range of valid values. parameter name : size
最佳答案
socket.BeginReceive(buffer, currentDataSize, buffer.Length, SocketFlags.None,
new AsyncCallback(dataRecievedCallback), buffer);
如果您使用偏移量,您收到的数据将存储在缓冲区中从指定的偏移量开始,因此您需要一个大小为偏移量+长度的数组。在您的情况下,只需调整长度以正确指示您可以存储多少字节(buffer.Length - currentDataSize
):
socket.BeginReceive(buffer, currentDataSize, buffer.Length - currentDataSize, SocketFlags.None,
new AsyncCallback(dataRecievedCallback), buffer);
关于c# - 如何使用 BeginReceive 接收多个部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875618/
当然,如果没有数据,BeginReceive() 将永远不会结束。MSDN suggests调用 Close() 会中止 BeginReceive()。 但是,在套接字上调用 Close() 也会对其
我用BeginReceive()方法监听特定的端口。 如何找到发件人的IP? 谢谢你。 最佳答案 我认为您应该详细说明您的问题。 无论如何,您都可以在清晰而详细的"Asynchronous Serve
我有一个用 C# 编写的简单异步套接字服务器(几乎是 Microsoft 的 example ),但是这个示例的问题是它只接受来自客户端的一条消息,然后关闭。我希望此服务器在收到任何消息后保持事件状态
据说 BeginReceive 和 BeginSend 回调不会在 .Net ThreadPool 上执行,而是在 上执行IOCP 线程池。对于高性能服务器,IOCP 线程尽快返回池至关重要,这意味着
基本上我已经建立了套接字连接。这是我的 WaitData 方法: public void WaitForData() { State state = new State
当读取未完成时,读取缓冲区有问题。 如果接收到的 XML 数据是有效的,那么我没有问题。但是,当接收到的 XML 数据不正确时,我正在等待数据的第二部分,然后出现错误。 我的代码如下: int cur
如果客户端通过同一个套接字向服务器发送多条消息,服务器端的 EndReceive 是否会将消息分开,或者服务器是否有可能在单个 BeginReceive 中接收来自两个单独发送的部分消息? 最佳答案
我目前有一个后台线程。在这个线程中是一个无限循环。 这个循环偶尔更新数据库中的一些值,然后在 MessageQueue 上监听 1 秒(使用 queue.Receive(TimeSpan.FromSe
要从套接字异步接收数据,.Net 支持对称的 BeginReceive/EndReceive 调用。基本上你调用BeginReceive()开始监听并确定数据到达时应调用的回调。在回调中调用 EndR
我想做这个 for (int i = 0; i 0 以确定在执行 UdpClient.Receive() 之前是否有任何 UDP 请求排队- 这完全消除了阻塞方面。我确实建议您谨慎尝试此操作,因为此
Socket.BeginReceive/EndReceive 函数的调用顺序是什么? 例如,我两次调用 BeginReceive,一次是为了获取消息长度,第二次是为了获取消息本身。现在的场景是这样的,
在 F# 中使用原始套接字编写异步 Ping,以使用尽可能少的线程启用并行请求。不使用“System.Net.NetworkInformation.Ping”,因为它似乎为每个请求分配一个线程。我也对
我需要接收异步消息。 在所有消息中,前 2 个字节表示下一个字节数组的长度。我的问题是在少数情况下我会收到意外的数据包。 如果我使用 Thread.Sleep(200)这个问题不会发生,或者很少发生。
首先让我说这与 UDP 作为协议(protocol)的可靠性无关。我知道数据包可能会被丢弃、乱序到达等。另外,严格来说,这不是数据速率的问题(我不是试图每秒处理太多的数据包),也不是数据量的问题数据(
我正在使用 UDPClient 发送多播请求并接收来自网络上各种客户端的响应。我能够发送请求并得到响应,但是我得到的响应非常慢。需要 2-3 分钟才能得到所有客户端的响应。在我检查 WireShark
问题: 当我做这样的事情时: for (int i = 0; i < 100; i++) { SendMessage( sometSocket, i.ToString()); Thre
嗨堆栈溢出成员。我正在努力处理一些简单的代码,但无法完成。我有这个等待连接的异步服务器。 while (clientSocket.Connected) { try
我在简单的 Udp 服务器中使用 UdpClient。 是否可以仅从特定的 IP 地址接收 BeginReceive()? 谢谢 最佳答案 没有。这是 UDP 的基础,它不像 TCP 那样是面向连接的
好的,这是我的第一个堆栈溢出问题,所以请随时提出更好的提问方式或我下次应该包括的内容。大多数时候我可以通过谷歌获得答案,但这个有点棘手...... 我正在用 C# 编写一个 Windows 应用程序,
我的 TCP ping/pong 工作正常,但在尝试添加第二种数据类型后,我遇到了接收程序从未触发 BeginReceive 回调的情况。 代码是相同的,除了第二个(有问题的)数据类型,序列化是提前完
我是一名优秀的程序员,十分优秀!