相关疑难解决方法(0)

C/C++套接字和非阻塞recv()

我遇到一个调用recv()系统调用没有阻塞的问题.我目前有一个客户端 - 服务器结构设置,我遇到的问题是我向服务器发送一条消息,而服务器设置为以下是这样的:

while (1) {
   char buf[1024];
   recv(fd, buf, sizeof(buf), flags);
   processMsg(buf);
}
Run Code Online (Sandbox Code Playgroud)

它正确接收第一条消息,但recv()不会阻止和"接收"不是所需的垃圾数据.我只想在发送消息时才对消息做出反应.任何人都可以建议吗?

c c++ sockets

13
推荐指数
2
解决办法
6万
查看次数

监视套接字以获取新数据然后处理该数据的最佳方法是什么?

请原谅我的C#.Net新手状态.如果这很明显并且我从文档中错过了它,那么将会感谢指向相关页面或示例代码的链接.

我正在开发一个应用程序,它将接受来自Java应用程序的TCP套接字连接.(是的,那部分需要Java.它是Sun SPOT设备,Java是唯一的选择.)Java应用程序将定期将新数据写入套接字,而我的应用程序的工作是接收byte [],转换它是一个字符串,处理数据(更新UI等),并可能将数据转发到另一台运行类似C#.NET应用程序的计算机上.

这就是我到目前为止所做的:现在,应用程序在启动时旋转了一个打开套接字的线程.Java应用程序可以成功连接到套接字,以便正常工作.我一直在寻找在的NetworkStream的beginRead方法和dataAvailable,lengthCanRead性质,但我不能完全肯定,当我读了一个数据包,通常约为512字节,但可以改变如何确定.

如果Java应用程序将数据写入流或存在积压的数据(Java应用程序将相当快速地传递数据.)如何确保我一次只读取一个数据包?如果Java应用程序null在写入时终止数据,那会有帮助吗?够了吗?

最后,套接字只接收一个连接,但我需要保持打开,直到出现错误或连接终止.处理这方面最优雅的方法是什么?我不认为关闭并重新打开每个数据包将起作用,因为在Sun SPOT基站上运行的Java应用程序的快速火灾(几乎实时)方面.现在,当基站终止时,我的应用程序死了一个响亮而痛苦的死亡.:)

感谢您阅读并提供任何帮助.

c# sockets multithreading sunspot .net-3.5

2
推荐指数
1
解决办法
3615
查看次数

标签 统计

sockets ×2

.net-3.5 ×1

c ×1

c# ×1

c++ ×1

multithreading ×1

sunspot ×1