using System.Net.Sockets;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading.Tasks;
private static void Main(string[] args)
Console.WriteLine("Hello World!");
var srv = Task.Factory.StartNew(() => { new Server().Start(); });
var cl = Task.Factory.StartNew(() => { new Client().Start(); });
public Connection(Socket socket)
Console.WriteLine($"Connected to client: {socket.RemoteEndPoint}");
Task.Factory.StartNew(() => Execute(socket));
private void Execute(Socket socket)
var buffer = new byte[2048];
var bytesCount = socket.Receive(buffer);
var msgReceived = (Message) Serializer.FromStream(new MemoryStream(buffer, 0, buffer.Length));
Console.WriteLine($"Received msg: {msgReceived.Content}");
Console.WriteLine("Trying again");
public static MemoryStream ToStream(object obj)
var stream = new MemoryStream();
var formatter = new BinaryFormatter();
formatter.Serialize(stream, obj);
public static object FromStream(MemoryStream stream)
Console.WriteLine("Starting from stream");
var formatter = new BinaryFormatter();
stream.Seek(0, SeekOrigin.Begin);
var rez = formatter.Deserialize(stream);
Console.WriteLine("Starting deserialization" + rez);
public string Content { get; set; }
var host = Dns.GetHostEntry("localhost");
var ipAddress = host.AddressList.First();
var serverEndpoint = new IPEndPoint(ipAddress, 9000);
var serverSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Connect(serverEndpoint);
Console.WriteLine($"Successfully connected to server on: {serverSocket.RemoteEndPoint}");
var msg = new Message {Content = "Hello World!"};
Console.WriteLine($"Sending msg with content: {msg.Content}");
var stream = Serializer.ToStream(msg);
var bytesSent = serverSocket.Send(stream.GetBuffer());
Console.WriteLine("Waiting to receive");
var buffer = new byte[2048];
var bytesReceived = serverSocket.Receive(buffer);
var receivedMessage = (Message) Serializer.FromStream(new MemoryStream(buffer));
Console.WriteLine($"Received message: {receivedMessage.Content}");
Console.WriteLine("Received done");
var host = Dns.GetHostEntry("localhost");
var ipAddress = host.AddressList.First();
var localEndPoint = new IPEndPoint(ipAddress, 9000);
var serverSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(localEndPoint);
Console.WriteLine("Waiting for client");
var clientSocket = serverSocket.Accept();
var connection = new Connection(clientSocket);