私は tcl スクリプト言語を学び始めており、ユニキャスト ネットワークを介してすべてのマルチキャスト パケットをトンネリングする tcl スクリプトを実行しようとしていました。
私はtclに関して初心者なので、ポイントをお願いしたいと思います:
私は Eclipse を使用して tcl でコーディングしています。必要なプラグインをインストールしており、すべてのパッケージもあると思いますが、Eclipse は次の呼び出しに下線を引いています。
fconfigure $sockMulticast -buffering none -mcastadd $ipMulticast -translation binary -remote [list $ipMulticast $port]
余分な引数があると言っていますが、ここで読むことができるので理解できません:
Pat は次のように書いています。「マルチキャストは、標準のユニキャストまたはブロードキャスト UDP とは少し異なります。アプリケーションがマルチキャスト グループに明示的に参加していない限り、オペレーティング システムはマルチキャスト パケットを無視します。TclUDP の場合、次を使用してこれを行います。
fconfigure $socket -mcastadd $mcastaddress
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
}