Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中捕获单个端口上不同端口的数据#_C#_Multithreading_File_Sockets - Fatal编程技术网

C# 在c语言中捕获单个端口上不同端口的数据#

C# 在c语言中捕获单个端口上不同端口的数据#,c#,multithreading,file,sockets,C#,Multithreading,File,Sockets,我在c#中进行应用,在c#中,我以数据包格式从单个端口上的不同端口连续获取数据。我获取的任何数据都是连续的。我从不同的源端口以数据包格式在端口24097上获取数据。为此,我为端口24097创建了一个线程,该线程持续接收数据,并在收到数据后立即恢复获取它从线程池传递到另一个线程的数据,线程池将该数据写入相应的文件。但我的问题是,每当一个线程将数据写入相应的文件时,如果在完成第一次写入操作之前该文件的下一个数据出现,那么我如何知道是否有数据写入操作正在进行?因为一旦我打开了文件,我不想在写入一个线程

我在c#中进行应用,在c#中,我以数据包格式从单个端口上的不同端口连续获取数据。我获取的任何数据都是连续的。我从不同的源端口以数据包格式在端口24097上获取数据。为此,我为端口24097创建了一个线程,该线程持续接收数据,并在收到数据后立即恢复获取它从线程池传递到另一个线程的数据,线程池将该数据写入相应的文件。但我的问题是,每当一个线程将数据写入相应的文件时,如果在完成第一次写入操作之前该文件的下一个数据出现,那么我如何知道是否有数据写入操作正在进行?因为一旦我打开了文件,我不想在写入一个线程后关闭它。它应该为写入另一个线程的数据而打开。请帮助我。

使用ConcurrentQueue集合来存储要写入文件的数据怎么样


我不确定线程池在磁盘文件方面是否有多大帮助。每个磁盘一个写入线程更有意义。在每个服务器/客户机线程中,您可以排队(blockingCollection),将完整的数据缓冲区实例发送到writer线程,并立即新建()另一个缓冲区,以便接收下一个数据。每个缓冲区实例可以包含对每个端口“fileWriter”类实例的引用,该类实例包含文件规范、文件句柄、写入方法等,以便写入线程可以打开/写入/关闭文件,可能是按照枚举的指示。在每个缓冲区中


“FileWriter”可以包含自己的列表/队列(任何队列都可以-它只从一个线程调用),它允许缓冲缓冲区实例,直到积累了大量数据,然后才真正写入文件,因此,要节约头部运动。

这是一个非常模糊的问题,要给出完整的答案,需要远远不止一个答案。多线程,包包,你使用的是什么包捕获库等等,你有多少经验?请考虑在你的问题的不同方面做一些研究和实验(线程,套接字,写文件等)。当你陷入困境时,你可以问一个更集中的问题,人们会很乐意帮助你。我正在创建应用程序,因为我首先创建了一个线程,它不断地接收数据。一旦它获得数据,它就会传递给另一个线程,该线程将对数据进行进一步处理。但我的问题是,我想创建一个应用程序不同的端口使用不同的线程,这样处理速度会更快。但是我没有得到那么高质量的输出,因为它需要更多的时间来处理。请帮帮我。你正在使用线程池吗?这可能会使事情变得简单一点:谢谢你的建议。但我已经使用了threadpool,但问题是当有多个线程时,就非常需要同步。假设我正在写入特定文件的数据,并且在完成该操作之前,如果同一文件的数据再次出现,那么我如何知道是否有正在对该文件执行写入操作?