0

私は tcl スクリプト言語を学び始めており、ユニキャスト ネットワークを介してすべてのマルチキャスト パケットをトンネリングする tcl スクリプトを実行しようとしていました。

私はtclに関して初心者なので、ポイントをお願いしたいと思います:

  1. 私は Eclipse を使用して tcl でコーディングしています。必要なプラグインをインストールしており、すべてのパッケージもあると思いますが、Eclipse は次の呼び出しに下線を引いています。

    fconfigure $sockMulticast -buffering none -mcastadd $ipMulticast -translation binary -remote [list $ipMulticast $port]
    

    余分な引数があると言っていますが、ここで読むことができるので理解できません:

    Pat は次のように書いています。「マルチキャストは、標準のユニキャストまたはブロードキャスト UDP とは少し異なります。アプリケーションがマルチキャスト グループに明示的に参加していない限り、オペレーティング システムはマルチキャスト パケットを無視します。TclUDP の場合、次を使用してこれを行います。

    fconfigure $socket -mcastadd $mcastaddress
    
  2. TCP ソケット (ユニキャスト ソケット) を構成する場合、呼び出し時に宛先のユニキャスト IP を再度指定する必要がありますfconfigureか?

コード:

#!/bin/sh
# updToTcp.tcl \
exec tclsh "$0" ${1+"$@"}

package require udp

set ::connectionsMulticast [list]
set ::connectionsUnicast [list]

proc udp_connect {ipMulticast ipUnicast port {multicast false}} {

    #Open UDP multicast socket
    set sockMulticast [udp_open $port]  
    if {$multicast} {
        #configures the multicast port
        fconfigure $sockMulticast -buffering none -mcastadd $ipMulticast -translation binary -remote [list $ipMulticast $port] ;#(1)
        #update the list of multicast connections with the socket
        lappend ::connectionsMulticast[list $ipMulticast $port $socketMulticast]

        #Open TCP unicast socket
        set sockUnicast [socket $ipUnicast $port]
        #configures the unicast port
        fconfigure $sockUnicast -buffering none -translation binary;#(2)
        #update the list of unicast connections with the socket
        lappend ::connectionsMulticast[list $ipUnicast $port $socketUnicast]

        #listen to the multicast socket, and forwarding the data to the unicast one
        fileevent $sockMulticast readable [list ::dataForwarding $sockMulticast $sockUnicast]
    }
}

    proc dataForwarding {socketSrc socketDst} {
    #get the data from the source socket, and place it on data
    set data [read $socketSrc]
    #placing the data in the destination socket
    puts -nonewline $socketDst $data
    return
    }
4

1 に答える 1