Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace IP_lab1
- {
- class Program
- {
- static object Lock = new object();
- static void Main(string[] args)
- {
- Task task = serverTask();
- Task c1 = clientTask("100",10, 100);
- Task c2 = clientTask("2",5, 2000);
- Task.WaitAll(new Task[] { task, c1, c2 });
- }
- static async Task serverTask()
- {
- TcpListener server = new TcpListener(IPAddress.Any, 2048);
- server.Start();
- while (true)
- {
- TcpClient client = await server.AcceptTcpClientAsync();
- byte[] buffer = new byte[1024];
- await client.GetStream().ReadAsync(buffer, 0, buffer.Length).ContinueWith(
- async (t) =>
- {
- int i = t.Result;
- while (true)
- {
- await client.GetStream().WriteAsync(buffer, 0, i);
- i = await client.GetStream().ReadAsync(buffer, 0, buffer.Length);
- Console.WriteLine("Server:" + System.Text.Encoding.Default.GetString(buffer).Substring(0, i));
- }
- });
- }
- }
- static async Task clientTask(string msg, int n, int t)
- {
- TcpClient client = new TcpClient();
- await client.ConnectAsync("localhost", 2048);
- byte[] msg_buffer = ASCIIEncoding.ASCII.GetBytes(msg);
- for (int i = 0; i < n; i++)
- {
- Thread.Sleep(t);
- await client.GetStream().WriteAsync(msg_buffer, 0, msg.Length).ContinueWith(
- async (tsk) =>
- {
- byte[] buffer = new byte[1024];
- int lnt = await client.GetStream().ReadAsync(buffer, 0, 1024);
- Console.WriteLine("Client:" + Encoding.Default.GetString(buffer).Substring(0, lnt));
- });
- }
- }
- static void server(Object stateInfo)
- {
- TcpListener server = new TcpListener(IPAddress.Any, 2048);
- server.Start();
- while (true)
- {
- TcpClient client = server.AcceptTcpClient();
- ThreadPool.QueueUserWorkItem(ThreadProc, client);
- }
- }
- static void ThreadProc(Object stateInfo)
- {
- TcpClient client = (TcpClient)stateInfo;
- while (true)
- {
- byte[] buffer = new byte[1024];
- int l = client.GetStream().Read(buffer, 0, 1024);
- client.GetStream().Write(buffer, 0, l);
- string serv = "Server: " + System.Text.Encoding.Default.GetString(buffer).Substring(0, l);
- writrConsoleMessage(serv, ConsoleColor.Green);
- }
- }
- static void ClientSim(object stateInfo)
- {
- object[] args = stateInfo as object[];
- string message = args[0] as string;
- int n = (int)args[1];
- int t = (int)args[2];
- TcpClient client = new TcpClient();
- client.Connect(IPAddress.Parse("127.0.0.1"), 2048);
- byte[] message_rcv;// = new byte[1024];
- for (int i = 0; i < n; i++)
- {
- byte[] message_bts = new ASCIIEncoding().GetBytes(message);
- client.GetStream().Write(message_bts, 0, message.Length);
- message_rcv = new byte[1024];
- int l = client.GetStream().Read(message_rcv, 0, 1024);
- string clie = "Client: " + System.Text.Encoding.Default.GetString(message_rcv).Substring(0, l);
- writrConsoleMessage(clie, ConsoleColor.Red);
- Thread.Sleep(t);
- }
- }
- static void writrConsoleMessage(string message, ConsoleColor color)
- {
- lock (Lock)
- {
- Console.ForegroundColor = color;
- Console.WriteLine(message);
- Console.ResetColor();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement