Listing 2
using namespace System;
using namespace System::IO;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::Threading;
int main(array<String^>^ argv)
{
if (argv->Length != 2)
{
Console::WriteLine("Usage: Client port message-count");
Environment::Exit(1);
}
int port = 0;
try
{
port = Int32::Parse(argv[0]);
}
catch (FormatException^ e)
{
Console::WriteLine("Port number {0} is ill-formed", argv[0]);
Environment::Exit(2);
}
if (port < IPEndPoint::MinPort || port > IPEndPoint::MaxPort)
{
Console::WriteLine("Port number must be in the range {0}-{1}",
IPEndPoint::MinPort, IPEndPoint::MaxPort);
Environment::Exit(3);
}
int messageCount = 0;
try
{
messageCount = Int32::Parse(argv[1]);
}
catch (FormatException^ e)
{
Console::WriteLine("Message count {0} is ill-formed", argv[1]);
Environment::Exit(4);
}
IPAddress^ ipAddress = nullptr;
try
{
/*1*/ ipAddress = Dns::GetHostEntry(Dns::GetHostName())->AddressList[0];
/*2*/ IPEndPoint^ ipEndpoint = gcnew IPEndPoint(ipAddress, port);
/*3*/ Socket^ clientSocket = gcnew Socket(AddressFamily::InterNetwork,
SocketType::Stream, ProtocolType::Tcp);
/*4*/ clientSocket->Connect(ipEndpoint);
NetworkStream^ netStream = gcnew NetworkStream(clientSocket);
BinaryReader^ br = gcnew BinaryReader(netStream);
BinaryWriter^ bw = gcnew BinaryWriter(netStream);
int value1, value2;
int result;
Random^ random = gcnew Random;
(int i = 1; i <= messageCount; ++i)
{
/*5*/ value1 = static_cast<int>(random->NextDouble() * 100);
/*6*/ value2 = static_cast<int>(random->NextDouble() * 100);
/*7*/ bw->Write(value1);
/*8*/ bw->Write(value2);
Console::Write("Sent values {0,3} and {1,3}",
value1, value2);
/*9*/ result = br->ReadInt32();
Console::WriteLine(", received result {0,3}", result);
/*10*/ Thread::Sleep(3000);
}
/*11*/ clientSocket->Shutdown(SocketShutdown::Both);
Console::WriteLine("Notified server we're shutting down");
/*12*/ clientSocket->Close();
/*13*/ netStream->Close();
Console::WriteLine("Shutting down client");
}
/*14*/ catch (SocketException^ e)
{
Console::WriteLine("Request to connect to {0} on port {1} failed"
+ "\nbecause of {2}", ipAddress, port, e);
Environment::Exit(5);
}
}