小编com*_*or8的帖子

TCP c#客户端可以在没有睡眠的情况下连续/连续地接收和发送吗?

这在某种程度上是"TCP的基础"问题,但与此同时我还没有在其他地方找到令人信服的答案,并相信我对TCP的基础知识有一个好的/很好的理解.我不确定问题的组合(或者一个问题,而我在确认几个要点的时候)是违反规则的.希望不是.

我正在尝试编写TCP客户端的C#实现,它与包含TCP服务器的现有应用程序通信(我无法访问其代码,因此没有WCF).当新信息进入或退出时,如何连接到它,发送和接收,最终断开连接.使用以下MSDN代码作为示例,他们列出"发送"和"接收"异步方法(或只是TcpClient),并忽略连接和断开连接,我怎样才能最好地继续检查收到的新数据包和需要时同时发送?

我最初使用TCPClient和GetStream(),并且msdn代码似乎仍然需要稍微描述一下循环和睡眠(直观地反击),其中我在一个单独的线程中以一个睡眠运行接收方法(10)毫秒,并根据需要在主(或第三)线程中发送.这允许我发送罚款,并且接收方法有效地定期轮询以查找新数据包.然后将接收到的数据包添加到队列中.

这真的是最好的解决方案吗?不应该有一个DataAvailable事件当量(或我丢失的东西在MSDN代码),使我们能够接受的时候,只有当有可用的新数据?

作为一个事后的想法,我注意到插座可以从另一侧切断而客户端不会意识到下一次拙劣的发送.为了澄清,客户端有义务发送常规Keepalive(并且接收不充分,仅发送)以确定套接字是否仍然存活.keepalive的频率决定了我知道链接断开的时间.那是对的吗?我试过Poll,socket.connected等只是为了发现为什么每个都没有帮助.

最后,要确认(我认为不是很好确定),在上面的按需发送和接收tcpclient.DataAvailable每十秒的情况下,如果同时发送和接收,是否会有数据丢失?如果我在接收的同时尝试发送将失败,覆盖其他或任何其他此类不良行为?

c# sockets asynchronous tcp

35
推荐指数
1
解决办法
4万
查看次数

Haskell - 在防护的右侧使用通配符

可以说我有一段这样的代码:

test pattern
 | pattern == (_,NOT (WIRE _)) = 1     
 | pattern == (_,AND (WIRE _) (WIRE _)) = 2
 | otherwise = 0
Run Code Online (Sandbox Code Playgroud)

我试图将它与几种可能性中的一种相匹配,一些有一个(WIRE""),有些有两个.我有如下实际输入,例如:("p",NOT(WIRE"x")).我希望有一个模式可以接受任何字母作为输入(我希望与_一起)并且我失败了(非法_).是否可以在haskell中执行此操作?

haskell pattern-matching guard

3
推荐指数
1
解决办法
1633
查看次数

创建文件依赖部分,需要xh:yh?

在下面(减少)make文件中,依赖项位于底部.这是我正在编写的实际make文件的一部分.在实际情况中,存在依赖于另一个头的头文件.

我无法在其他地方找到答案所以......我是否需要在依赖于"swap.h:other.h"的效果的底部包含一行?

SRC =       swap.c other.c etc
OBJ =       swap.o other.o etc
EXE =       swap

$(EXE): $(OBJ)
        $(CC) $(CFLAGS) -o $(EXE) $(OBJ) -lm

## Dependencies

swap.o: swap.h other.h
other.o:    other.h
Run Code Online (Sandbox Code Playgroud)

谢谢!

c dependencies makefile header

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