通过命名管道与非.net应用程序进行WCF通信
我听说WCF是整个网络和.NET应用程序的新标准.这个想法似乎也很有意义,为程序提供通信的标准接口. 这是我的情况,我有一个.NET应用程序,我想通过管道通信与Ruby应用程序进行通信.在.NET侧(服务器),我想使用WCF,而Ruby侧(客户端)将咀嚼口香糖和胶带. 我认为两端都不需要是wcf,但是在制作这项工作方面将涉及什么.是否有标准协议WCF期望传入请求? 解决方案 使用对非WCF客户端绑定的命名管道可能是可能的,但这并不容易.您需要以正确的格式发送消息以使WCF消耗. 请参阅此 WCF消息上的最后一个条目框架提示复杂性.这不是不可能的,但是值得吗? 推荐是HTTP传输 +某些类型的文本或标记编码,例如BasichttpBinding或WebHttpBinding. 其他解决方案 取决于您的绑定,您可以使WCF成为webHTTP绑定,并使其恢复(最简单),并且您只需获取和帖子.您将必须使用肥皂标头的其他绑定,以与您的WCF进行通信,我自己没
0 2024-04-21
编程技术问答社区
从安全角度看,在Windows中使用管道是否被认为是危险的?
从安全角度来看,在窗户中使用的管道是否存在危险? 解决方案 管道不是Windows中的特殊安全风险.如果您担心安全性,请确保将管道上的安全描述符设置为适当的DACL.如果您的用法要求将管道开放供任何人连接到,则必须将传入的数据视为可疑的,就像任何文件或网络输入一样. 其他解决方案 如果您担心网络嗅探,我想它们可能是因为我认为系统之间的管道不会加密.我不知道它们是如何在Windows中实现的,但是我希望通过共享存储器在同一台计算机上的进程/线程之间的管道将使用,而不会让框外的流量泄漏.如果您需要系统之间的安全通信,我将使用安全的插座.
0 2024-04-20
编程技术问答社区
如何使用命名管道在c++ .dll和C#应用程序之间发送消息?
我正在制作用C ++写的注射.dll,我想使用名为Pipes与C#应用进行通信. 现在,我正在使用C#应用中的内置system.io.pipe .net类,并且我在C ++中使用了常规功能. 我在C ++方面没有太多经验(阅读:这是我的第一个C ++代码..),我在C#中经验丰富. 似乎与服务器和客户端的连接工作,唯一的问题是消息没有发送.我尝试将.dll制作服务器,C#App the Server,使管道方向输入(双工),但似乎没有用. 当我尝试使.dll将消息发送到C#应用程序时,我使用的代码就是这样: DWORD ServerCreate() // function to create the server and wait till it successfully creates it to return. { hPipe = CreateNamedPipe(pipename,//The unique pipe name. This stri
0 2024-04-19
编程技术问答社区
远程关闭后保持管道开放的最佳方法
使用 static public void ThreadStartServer() { while (true) { using (NamedPipeServerStream pipeStream = new NamedPipeServerStream("mytestpipe")) { Console.WriteLine("[Server] Pipe created {0}", pipeStream.GetHashCode()); pipeStream.WaitForConnection(); Console.WriteLine("[Server] Pipe connection established"); using (StreamReader sr = new StreamReader(pipeStream)) { string temp; while ((temp = sr.ReadLine()) != null) { Console.WriteLine("{0}: {1}",
0 2024-04-16
编程技术问答社区
为什么ffmpeg会在一个进程中随机停止?
ffmpeg感觉就像花了很长时间.然后,我查看我的输出文件,发现它停止了6至8MB.完全编码的文件约为14MB.为什么FFMPEG停止?我的代码锁定在standardOutput.ReadToend();.我不得不杀死该过程(在看到它之前每秒更新时都没有移动10秒之后),然后得到Stdout和Err的结果. stdout在"" stderr下方. 输出MSG显示了文件大小结束.我还看到CPU停止时的使用情况下降.我复制了Visual Studios的论点. CD到相同的工作目录并运行CMD(bin/ffmpeg)并粘贴了该论点.它能够完成. 注意:我必须弄出STD并犯错以检查失败. int soundProcess(string infn, string outfn) { string aa, aa2; aa = aa2 = "DEAD"; var app = new Process();
0 2024-04-16
编程技术问答社区
.NET 3.5 (C#) 网络上的命名管道
我正在努力获取一个名为管道的.NET(不是),以通过网络进行通信. using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(servername, "myPipe", PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation)) ...当servername =" localhost"并且管道服务器在同一框上时,效果很好.但是,如果这是另一台计算机 - 无论我是否将Servername成为IP地址,DNS名称,NetBios名称,UNC路径等,则意味着管道永远不会连接.它实际上并没有失败,pipeclient.connect()只是坐在那里. 关于此的各种论坛,博客和网站上有很多不同的帖子.谁能直接设置记录并告诉我:如何让命名的管端客户端从一台计算机上的一个C#应用程序连接到另一台计算机上运行的命名管服
2 2024-04-16
编程技术问答社区
IPC:UWP C#管道客户端在连接C++服务器时失败
我正在尝试使用名为Pipe在Win10中的应用和服务之间进行通信.应用程序是使用C#(UWP)开发的,作为管道客户端,前景运行.服务作为管道服务器是C ++运行背景.现在问题是该应用无法连接服务.我知道MSFT Doc说,只有在应用程序包容器中支持管道.但是我尝试了以下情况:我的UWP应用程序与C#(NONUWP)服务器(不在App-Container中); C ++客户端vs C ++服务器(在前景中运行以外的服务的相同代码).两种情况都很好.因此,我认为安全特权可能有问题.但是我找不到异常的东西,有人可以帮我吗? 客户端(UWP/C#): _namedPipeClientHandle[index] = CreateFileW(@"\\.\pipe\starpipe", DESIREDACCESS.GENERIC_READ | DESIREDACCESS.GENERIC_WRITE,
0 2024-04-14
编程技术问答社区
ffmpeg输出管道到命名的windows管道
这个问题与我以前的问题有关:将原帧转换为WebM live stream 我想将视频插入ffmpeg并通过另一根管道读回去,但是我无法将ffmpeg.exe的输出输送到窗户上的命名管道上. 我对C#中管道的定义: NamedPipeServerStream p_to_ffmpeg; NamedPipeServerStream p_from_ffmpeg; p_to_ffmpeg = new NamedPipeServerStream("to_ffmpeg", PipeDirection.Out, 1, PipeTransmissionMode.Byte); p_from_ffmpeg = new NamedPipeServerStream("from_ffmpeg", PipeDirection.In, 1, PipeTransmissionMode.Byte); ,然后我在一个单独的过程中开始使用以下选项:-f rawvideo -vcodec rawvideo
0 2024-04-13
编程技术问答社区
c#重定向(管道)进程输出到另一进程
我正在尝试使用流程类在C#中运行一个过程. Process p1 = new process(); p1.startinfo.filename = "xyz.exe"; p1.startinfo.arguments = //i am building it based on user's input. p1.start(); 因此,基于用户输入,我正在构建参数值.现在,我有一种情况,必须将P1的输出输送到另一个过程说GREP.所以我基本上尝试了这个 p1.startinfo.arguments =" -info | grep 1234"; 我的意图类似于xyz.exe -info | grep 1234 ,但这似乎不起作用.NET..我实际上可以创建另一个过程变量并运行" grep"作为一个单独的过程.但是我想知道是否有任何方法可以做到以上尝试.. 解决方案 只要将CMD用作过程. Process test = new Process();
2 2024-04-11
编程技术问答社区
C# 控制台用管道接收输入
我知道如何使用参数编程控制台应用程序,例如:myProgram.exe param1 param2. 我的问题是,如何使程序与|,示例:echo" word" | myprogram.exe? 解决方案 您需要使用Console.Read()和Console.ReadLine(),就好像您正在阅读用户输入一样.管道透明地替换用户输入.您不能轻易使用两者(尽管我确定这很可能...). 编辑: 简单cat样式程序: class Program { static void Main(string[] args) { string s; while ((s = Console.ReadLine()) != null) { Console.WriteLine(s); } } } 按预期运行时,输出: C:\...\ConsoleApplicat
2 2024-04-10
编程技术问答社区
作为一个进程的孩子,如何知道哪个文件描述符是父母的?
我正在尝试编写一个程序,该程序叉和等待他的孩子完成,然后孩子在输入上做一些工作,然后按照父母的方式进行分叉. 现在,我知道向孩子分叉的文件描述符副本,我应该关闭与父母相关的文件,但我不知道父母是哪个.我需要给我的孩子是父母pid吗? 我一直在尝试在一个小时的大部分时间里缠绕着头,我认为我有某种思维障碍,因为我无法得出结论. tl; dr:作为一个孩子的过程,我怎么知道哪个文件描述符属于我的父母? 解决方案 在fork之后仅在孩子中为0).因此,您知道是什么文件描述符,因为您已经在父母和子女中编码了程序.在Linux上,您还可以阅读/proc/self/fd/目录,请参阅您可以在fork之后和exec之前关闭大多数文件描述符;您可以编码 之类的内容 for (int fd=3; fd
0 2024-04-10
编程技术问答社区
冲洗管道而不关闭C
我在这里发现了很多线程,询问在不关闭它的情况下写入管道后如何冲洗管道. 在每个线程中,我都可以看到不同的建议,但找不到明确的解决方案. 这是一个快速摘要: 避免在管道上读取阻塞的最简单方法是编写读数的确切字节数. 也可以通过使用PTMX而不是管道来完成,但人们说可能是很多. 注意:不可能将FSYNC与管道一起使用 还有其他更有效的解决方案吗? 编辑: 当发件人想要编写n个字符,但客户端读取m字符(其中m> n)时,冲洗将很方便.客户将阻止等待其他M-N字符.如果发件人想再次与客户交流,请让他无法关闭管道,而只是发送确切的字节数可能是错误的良好来源. 接收器这样运行,无法修改: while((n=read(0, buf, 100)>0){ process(buf) 因此,发件人希望处理:" file1"和" file2",必须: write(pipe[1], "file1\0*95", 100); write(pip
0 2024-04-10
编程技术问答社区
同一管道的多个读取进程都可以读取同一信息
我对管道有一些疑问,请感谢您的帮助,如果有人知道 可以通过多个过程共享管道,同时允许这些过程相互交换"消息". 当相同管道的多个读取过程都可以读取相同的消息(仅发送一次,而不是多个副本)? 在多线程环境中,在写入管道时,过程发送的消息可能会损坏吗? 感谢您的收听 解决方案 停止思考"消息".管道接受一个字节序列,您的应用程序完全负责将任何结构分配给序列.每个写入管道上的字节都可以准确地读取一次,而不是多次读取.如果每个写入管道的尺寸为固定尺寸且小于指定数量的系统,则写入将是原子,并且在写入过程中,数据将不会被"损坏"(与其他写入).但是,如果任何读者都在读取不同大小的块,则数据可能会在读取端交错. (例如,作家将64个字节写入一个"消息",但是读者读取60个字节.您的数据可能看起来"损坏").在多线程环境中获取"损坏"数据非常容易.有可能确保任何写信都没有交错,但是很难正确地完成它.保持较小的消息和固定尺寸,并确保用单个write系统调用编写(例如,请勿将fpr
0 2024-04-10
编程技术问答社区
为什么我的管道取代了stdin,却不能读入printf?
目的是使用DUP,DUP2和管道在父母和子过程之间进行通信.只是为了感觉如何使用DUP和管道. 由子进程调用的函数多重函数将数字作为参数(3),并用用户输入(在这种情况下为父母打印在父母中)以获取产品. (应该是15) #include #include void main(int argv, char *argc) { int testpipe[2]; pipe(testpipe); int PID = fork(); if (PID == 0) { dup2(testpipe[0], 0); close(testpipe[1]); execl("./multby", "multby", "3", NULL); close(testpipe[0]); close(0); } else {
0 2024-04-10
编程技术问答社区
C语言中子进程和父进程之间的通信:父进程不阻塞
我希望父母和子过程使用管道在C Linux中进行通信.首先,我希望父母通过一个弦,然后孩子承认.我创建了两个文件描述符.一个用于父母的孩子,即读取管和其他viceversa的写入pipe. 问题在于它没有将我的数据作为输入.我也希望printf语句(例如"输入您的数据")打印一次,但是由于叉子之后,有两个进程,因此它们显示了两次.有其他选择吗? //readpipe[0] = child read //readpipe[1]= parent write //writepipe[0]=parent read //writepipe[1]=child write #include #include #include #include #include int main(void) { pid_t pid; int r;
0 2024-04-10
编程技术问答社区
多进程和管道
我正在制作连接四个游戏,我想拥有多个过程和管道,但是我不确定从哪里开始.我知道您必须使用叉子和管道,但是当我在游戏开始之前分叉时,我会为每个游戏获得相同的结果.我很困惑从这里去哪里.任何建议将不胜感激.以下是我的一些代码,我要清除零件以检查获胜,因为我没有必要查看. #include #include #include #include int *moves; //int **Board; int w; void display(int ** Board,int rows, int columns); int** build_board(int N); int makeMove(int** Board, int player); int checkVictory(int** Board); int checkHorr(int** Board); void AI_move(int** Board,i
0 2024-04-10
编程技术问答社区
在没有pipe()的情况下,2个进程如何相互对话?
给定此代码: #include #include #include #include #include #define BUF_SIZE 256 int main() { int fd1[2]; int fd2[2]; ssize_t numRead = -1; // remark : working under the assumption that the messages are of equal length const char* messageOne = "Hello world , I'm child number 1\n"; const char* messageTwo = "Hello world , I'm child number 2\n"; const unsigned int c
0 2024-04-10
编程技术问答社区
过程完成时如何使Windows管道添加EOF
我在模拟管道的窗口上发挥递归C功能. 到目前为止,这是我的功能: static BOOL execute_in_pipe(char (*cmdline)[1024], char *env, int index, int pipe_length, STARTUPINFO *old_suinfo, HANDLE proc_handles[]) { //Create new startup info STARTUPINFO suinfo; memset(&suinfo, 0, sizeof(suinfo)); suinfo.cb = sizeof(suinfo); //Create new process info PROCESS_INFORMATION pinfo; //Make pipe HANDLE pipe_out_rd, pipe_out_wr; if(index > 0) {
0 2024-04-10
编程技术问答社区
ls | wc使用C不工作
我已经写了一个C程序,该程序使用多个管道模拟了外壳.问题是我可以运行大多数命令,例如ls | cat等,但是我无法使用ls | wc. wc不起作用时是否有任何情况? int pipefd[4]; int p1 = pipe(pipefd); // Open pipe 1 int p2 = pipe(pipefd + 2); // Open pipe 2 pid_t pid; for(i = 0; i
0 2024-04-10
编程技术问答社区
在C语言中用popen捕获tshark的标准输出
我正在尝试通过C中的程序从 tshark 捕获标准输出. 为此,我使用 popen()呼叫打开tshark进程并从返回的文件流中读取. 代码样本: #include #include int main() { FILE* pipe_fd = popen("tshark -i eth0 -R icmp -2 -T fields -e icmp.checksum -e icmp.seq", "r"); //FILE* pipe_fd = popen("lsof", "r"); if (!pipe_fd) { fprintf(stderr, "popen failed.\n"); return EXIT_FAILURE; } char buffer[2048]; while (NULL != fgets(buffer, sizeof(buffer), p
0 2024-04-10
编程技术问答社区