Jump to content

Distributed programming: Difference between revisions

provided correct C# example
(provided correct C# example)
Line 182:
 
=={{header|C sharp|C#}}==
Start the program with "server" parameter to start the server, and "client" to start the client. The client will send data to the server and receive a response. The server will wait for data, display the data received, and send a response.
{{incorrect|C sharp|The protocol used is not sufficiently general-purpose.}}
The example server can handle one client at any one time. It will read what the client writes, and respond with "Hello World!". The client will write "Hello World!" and read the response from the server.
 
===Server===
<lang csharp>
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading.Tasks;
 
using static System.Console;
class Program
 
class DistributedProgramming
{
const int Port = 555;
static void Main(string[] args)
{
TcpListener server = new TcpListener(8000);
server.Start();
 
async static Task RunClient()
Console.WriteLine("Listening, port 8000");
{
WriteLine("Connecting");
var client = new TcpClient();
await client.ConnectAsync("localhost", Port);
 
using (var stream = client.GetStream())
TcpClient client;
{
do
WriteLine("Sending loot");
{
var data = Serialize(new SampleData());
// Accept client
await stream.WriteAsync(data, 0, data.Length);
client = server.AcceptTcpClient();
Console.WriteLine("Recieved client: " + client.Client.AddressFamily.ToString());
 
WriteLine("Receiving thanks");
// Recieve
var buffer = new byte[80000];
string tRecieve = "";
var bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
char t;
var thanks = (string)Deserialize(buffer, bytesRead);
do
WriteLine(thanks);
{
}
if (client.Available > 0)
{
t = (char)client.GetStream().ReadByte();
 
client.Close();
if (t == 0)
}
break;
 
async static Task RunServer()
tRecieve += t;
{
}
WriteLine("Listening");
} while (true);
var listener = new TcpListener(IPAddress.Any, Port);
listener.Start();
var client = await listener.AcceptTcpClientAsync();
 
using (var stream = client.GetStream())
Console.WriteLine("Recieved: " + tRecieve);
{
WriteLine("Receiving loot");
var buffer = new byte[80000];
var bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
var data = (SampleData)Deserialize(buffer, bytesRead);
WriteLine($"{data.Loot} at {data.Latitude}, {data.Longitude}");
 
WriteLine("Sending thanks");
// Send
var thanks = Serialize("Thanks!");
byte[] tSend = Encoding.ASCII.GetBytes("Hello World!");
client.GetStream() await stream.WriteWriteAsync(tSendthanks, 0, tSendthanks.Length);
}
client.GetStream().WriteByte(0);
 
client.Close();
Console.WriteLine("Sent: " + Encoding.ASCII.GetString(tSend));
listener.Stop();
Write("Press a key");
ReadKey();
}
 
static byte[] Serialize(object data)
// Close
{
client.Close();
using (var mem = new MemoryStream())
} while (true);
{
new BinaryFormatter().Serialize(mem, data);
return mem.ToArray();
}
}
 
static object Deserialize(byte[] data, int length)
}
{
using (var mem = new MemoryStream(data, 0, length))
{
return new BinaryFormatter().Deserialize(mem);
}
}
 
static void Main(string[] args)
{
if (args.Length == 0) return;
 
switch (args[0])
{
case "client": RunClient().Wait(); break;
case "server": RunServer().Wait(); break;
}
}
}
</lang>
 
[Serializable]
===Client===
class SampleData
<lang csharp>
using System.Net.Sockets;
 
class Program
{
public decimal Latitude = 44.33190m;
static void Main(string[] args)
public decimal Longitude = 114.84129m;
{
public string Loot = "140 tonnes of jade";
TcpClient client;
 
// Connect
do
{
client = new TcpClient();
client.Connect(new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 8000));
 
Console.WriteLine("Connected");
 
// Send
byte[] tSend = Encoding.ASCII.GetBytes("Hello World!");
client.GetStream().Write(tSend, 0, tSend.Length);
client.GetStream().WriteByte(0);
 
Console.WriteLine("Sent: " + Encoding.ASCII.GetString(tSend));
 
// Read
string tRecieve = "";
char t;
do
{
if (client.Available > 0)
{
t = (char)client.GetStream().ReadByte();
 
if (t == 0)
break;
 
tRecieve += t;
}
} while (true);
 
Console.WriteLine("Recieved: " + tRecieve);
 
client.Close();
 
Console.Read();
} while (true);
}
}
</lang>
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.