簡體   English   中英

使用Perl和C#中的套接字在本地計算機上進行進程間通信

[英]inter-process communication on local machine using socket in perl and c#

我正在使用ac#應用程序,該應用程序會生成新的進程來運行Perl程序:

我想知道是否有一種使用套接字接口的方法讓perl程序與c#應用程序通信。 如果使用套接字,則該地址必須是本地主機:127.0.0.1? 如何選擇要使用的端口號?

也,

由於C#應用程序產生了一個進程來運行Perl程序,是否有一種方法可以在c#中使用進程間通信來完成此任務? 我的意思是也許正在運行perl的進程可以向c#應用程序發送消息?

謝謝。

使用IO :: Socket :: INET模塊。

您可以連接到本地主機上的端口

$sock = IO::Socket::INET->new('127.0.0.1:2525');

或到另一個地址

$sock = IO::Socket::INET->new("host.example.com:6789");

這些示例假定Perl程序將是客戶端,並且您已經用C#編寫了服務器。 如果不是這樣,請使用IO :: Select模塊。 以下是其文檔中的示例:

use IO::Select;
use IO::Socket;

$lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
$sel = new IO::Select( $lsn );

while (@ready = $sel->can_read) {
    foreach $fh (@ready) {
        if ($fh == $lsn) {
            # Create a new socket
            $new = $lsn->accept;
            $sel->add($new);
        }
        else {
            # Process socket
            # Maybe we have finished with the socket
            $sel->remove($fh);
            $fh->close;
        }
    }
}

然后使用此代碼從C#連接到本地主機上的端口8080。

端口的選擇大部分是任意的。 雙方都需要在集合點端口上達成共識,並且要避免端口低於1024。連接到localhost還是其他地址由服務器綁定的地址確定。 要綁定到網絡可訪問的地址,請修改以上代碼以使用

$lsn = new IO::Socket::INET(Listen => 1, LocalAddr => "host.example.com:8080");

大小為1(“ Listen參數)的積壓異常。 一個典型的大小是sys/socket.hSOMAXCONN的值。

您可以嘗試命名管道(.NET側為System.IO.Pipes,Perl側為Win32 :: Pipe)。

最好的選擇是插座。 您可以選擇任何未使用且高於1024的端口。但是您可能想要查看常用端口分配列表,以確保您不會選擇與環境中的程序沖突的端口

-編輯:

似乎該鏈接建議使用高於49152的端口號。哇,時間在變:)

您可以在沒有套接字和管道的情況下進行管理:在C#中,重定向生成的進程的標准輸入和輸出( 例如 ),然后編寫perl腳本,該腳本從STDIN接收數據並將結果發送到STDOUT。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM