これ何て呼びますか

もし暇な方がいらっしゃいましたら、元々入っている標準モジュールのみで、
インターネットサーバーとクライアントを作るとどのようになるのか、
Hello World の最小限の記述を書いて頂けないでしょうか?

1:クライアントにIPとポートを入力し、Hello Worldを送信する。
2:Hello World受け取ったサーバーは、クライアントに対しHello Worldを送信する。

* サーバーもクライアントもwindowsで動作するものとする。

質問者からの補足コメント

  • 一応補足ですが、もちろん入力と言うのはGUIを作れとかそうゆうことを言ってるわけじゃないです。
    $ip = '01.23.456.789':
    とかでけっこうです。

      補足日時:2015/11/23 05:44

A 回答 (1件)

### Source


## Server
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
use IO::Handle;

my $port = shift // 1234;

# Protocol
my $proto = getprotobyname('tcp');

# Make socket
socket( my $sock, PF_INET, SOCK_STREAM, $proto ) or die "socket:$!";

# Set socket options
setsockopt( $sock, SOL_SOCKET, SO_REUSEADDR, 1 ) or die "setsockopt error $!";

# bind
bind( $sock, pack_sockaddr_in( $port, INADDR_ANY ) ) or die "bind:$!";

#listen
listen( $sock, SOMAXCONN ) or die "bind error $!";

my $paddr;
my ( $client_port, $client_iaddr, $client_host, $client_ip );
while (1) {

# Wait to connect
$paddr = accept( my $session, $sock ) || die "accept:$!";

# No buffering
# select(SESSION); $|=1; select(STDOUT);
$session->autoflush(1);

# Print client information
( $client_port, $client_iaddr ) = unpack_sockaddr_in($paddr);
$client_ip = inet_ntoa($client_iaddr);
print "Connect: $client_ip, port $client_port\n";

# Print Client Mesage
my $msg = <$session>;
print "from client: ", $msg;

# Say Hello World
print $session "Hello World. I'm server\n";
close $session or die "close:$sock";
}
close $sock or die "close:$sock";

## Client
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
use IO::Handle;

my $host = shift // 'localhost';
my $port = shift // 1234;

# Change IP Information
my $ipaddr = inet_aton($host) || die "inet_aton error $!";

# Create socket information
my $sock_addr = pack_sockaddr_in( $port, $ipaddr );

# Protocol
my $proto = getprotobyname('tcp');

# Create socket
socket( my $sock, PF_INET, SOCK_STREAM, $proto ) or die "socket error $!";

# Connet
connect( $sock, $sock_addr ) or die "connect error $!";

# No buffering
#select(CLIENT_SOCK); $|=1; select(STDOUT);
$sock->autoflush(1);

# Send Hello
print $sock "Hello World. I'm client\n";

# Recieve Hello
my $msg = <$sock>;
print "from server: ", $msg;

# Close
close $sock or die "close:$!";

### Command
## Exec Server
$ perl tcp_server.pl

## Exec Client
$ perl -w tcp_client.pl
from server: Hello World. I'm server
    • good
    • 1
この回答へのお礼

丁寧に書いていただきありがとうございます

お礼日時:2015/11/26 07:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!