2012-05-20 93 views
2

我目前正在开发一个iOS应用程序,它使用CFStream与C#服务器进行通信。通过这个连接发送1个TCP数据包就是它应该做的。但是,如果我尝试发送两个数据包,它们都会失败。iOS连续TCP请求失败

服务器被设计为异步像一个here。 iOS端使用CFStream类进行设计,如this教程中所述。

为什么会发生这种情况,我该如何解决?所有帮助非常感谢!

编辑:我刚才想用一个Python服务器替换C#服务器,该系统完美地工作,这将暗示,这个问题是服务器端。可能服务器在收到第一个数据包后意外关闭连接?

+0

我想第一步是确定问题出在哪里。它在服务器还是客户端?例如:你可以通过telnet将几条消息发送到服务器吗? –

+0

这可能是客户端。服务器端命令行告诉我,它只接收第一个TCP数据包,它甚至没有得到第二个。远程登录测试显示服务器工作正常。 – danielmhanover

+0

你可以尝试绑定发送功能到一些额外的按钮。你能以这种方式发送多个数据包吗?我问,因为我认为你正在尝试发送第二个数据包,而第一个数据包仍在发送,因此以发送缓冲区的损坏结束。 –

回答

0

原来的服务器被设置为关闭连接它发送的信息,它的第一个数据包发送到客户端后。解决的办法是在ReadCallback()方法增加一个

handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, 
     new AsyncCallback(ReadCallback), state); 

,以确保它将恢复处理其请求之后侦听到客户端。

1

开始搞清楚肯定谁是关闭TCP套接字。在服务器上运行Wireshark以检查谁在该连接中发送FIN或RST。这将把问题分解成一半。

+0

我刚刚发现它是服务器。我仔细看MSDN的例子,事实证明服务器收到消息后立即关闭连接。我将很快发布解决方案代码 – danielmhanover