#!/usr/bin/perl # # File: getdata # Date: 06-Jan-99 # Author: I. Chuang # # Get data from a given VNMR experiment over a vnmrlink, in which # vnmrlink3 is running on the spectrometer host. # # Usage: getdata expno # # this puts the data in the subdirectory exp# use Socket; use FileHandle; use IPC::Open2; $pnet = 2212; # our network port to listen on, for remote #$vn = &NetOpenSocket("dirac.almaden.ibm.com",$pnet); $vn = &NetOpenSocket("ramsey.media.mit.edu",$pnet); $vn->autoflush(); print $vn "getdata $ARGV[0]\n"; open F, "|tar xvzf -"; while(<$vn>) { print F; } close $pn; close F; wait; exit; sub NetOpenSocket { # usage: NetWrite(hostname,port) my ($remote,$port, $iaddr, $paddr, $proto, $line, $myip, $foo); ($remote,$port,$cmd) = @_; $iaddr = inet_aton($remote) || die "no host: $remote"; $paddr = sockaddr_in($port, $iaddr); $proto = getprotobyname('tcp'); socket(VNMR, PF_INET, SOCK_STREAM, $proto) || die "socket: $!"; connect(VNMR, $paddr) || die "connect: $!"; return(VNMR); } sub NetWrite { # usage: NetWrite(hostname,port,str) my ($remote,$port, $iaddr, $paddr, $proto, $line, $myip, $foo); ($remote,$port,$cmd) = @_; $iaddr = inet_aton($remote) || die "no host: $remote"; $paddr = sockaddr_in($port, $iaddr); $proto = getprotobyname('tcp'); socket(VNMR, PF_INET, SOCK_STREAM, $proto) || die "socket: $!"; connect(VNMR, $paddr) || die "connect: $!"; print VNMR "$cmd\n"; close (VNMR) || die "close: $!"; } sub NetOpenSocketListner { # usage: NetOpenSocketListner(port) my $paddr; my $port = $_[0]; my $proto = getprotobyname('tcp'); my $line = ""; my @ret = ""; socket(Server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!"; setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) || die "setsockopt: $!"; bind(Server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!"; listen(Server,SOMAXCONN) || die "listen: $!"; $paddr = accept(SOCK,Server); }