#!/bin/env perl
# winsock_control.pl
# appleii
# 2010.06.03
use strict;
use warnings;
use Win32::OLE qw(EVENTS);
use Win32::OLE::Variant;
Win32::OLE->Initialize(Win32::OLE::COINIT_OLEINITIALIZE);
my $sock = Win32::OLE->new('MSWinsock.Winsock');
Win32::OLE->WithEvents($sock, \&event, "DMSWinsockControlEvents");
$sock->{Protocol} = 0;
$sock->Connect("www.google.cn", 80);
Win32::OLE->MessageLoop();
sub event
{
my ($obj, $event, @args) = @_;
if ($event eq "Connect")
{
$sock->SendData("GET / HTTP/1.1\r\nHost: www.google.cn\r\nConnection: Close\r\n\r\n");
}
elsif ($event eq "DataArrival")
{
my $buffer = Win32::OLE::Variant->new(VT_BSTR|VT_BYREF);
$sock->GetData($buffer, VT_BSTR|VT_BYREF);
print $buffer->Value();
}
elsif ($event eq "Close")
{
$sock = undef;
Win32::OLE->QuitMessageLoop();
}
}
|