Top.Mail.Ru
Ответы

Будет ли тут нормальная передача/обработка сообщений? С#

Вот код

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
 using System; 
using System.Collections.Generic; 
using System.Net; 
using System.Net.Sockets; 
using CSharpShellCore; 
using System.Text.Unicode; 
using System.Text; 
 
class Client 
{ 
    static Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp); 
	static IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000); 
	public static bool Connect() 
	{ 
	    socket.Connect(ep); 
		if(socket.Connected) 
		{ 
		    Console.WriteLine("Подключение выполнено по ip 127.0.0.1 и порту 2000"); 
			return true; 
		} 
		else 
		{ 
		    Console.WriteLine("Подключение не выполнено"); 
			return false; 
		} 
	} 
	public static void WriteMessage(string msg) 
	{	 
	    byte[]buffer; 
		buffer = Encoding.UTF8.GetBytes(msg); 
	    socket.Send(buffer); 
		ProcessMessage(); 
	} 
	private static void ProcessMessage() 
	{	 
		var buffer = new byte[4096]; 
	    var dataRead = socket.Receive(buffer); 
		Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, dataRead)); 
	} 
} 
 
class Server 
{ 
    static IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000); 
    static TcpListener listener = new TcpListener(ep); 
	static bool isWorking = false; 
	public static void Start() 
	{ 
	    listener.Start(); 
		isWorking = true; 
	} 
    public static void ProcessMessage(List<NetworkStream> list) 
	{ 
	    while(isWorking) 
		{ 
			TcpClient client = listener.AcceptTcpClient(); 
			NetworkStream stream = client.GetStream(); 
			list.Add(stream); 
			byte[] buffer = new byte[client.ReceiveBufferSize]; 
			int bytesRead = stream.Read(buffer,0, buffer.Length); 
			foreach(NetworkStream s in list) 
			{ 
			    s.Write(buffer, 0, bytesRead); 
			} 
		} 
	} 
	public static void Stop() 
	{ 
	    listener.Stop(); 
		isWorking = false; 
	} 
} 
 
class Program 
{ 
    static void Main(string[] args) 
    { 
        List <Client> clientList = new List<Client>(); 
    } 
} 
По дате
По рейтингу
Аватар пользователя
Гуру

Запусти

Аватар пользователя
Искусственный Интеллект

добавлен асинхрон

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
 using System; 
using System.Collections.Generic; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
using System.Threading.Tasks; 
 
class Client 
{ 
    static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
 
    public static async Task<bool> ConnectAsync() => 
        await ConnectAsync("127.0.0.1", 2000); 
 
    public static async Task<bool> ConnectAsync(string ip, int port) 
    { 
        try 
        { 
            await socket.ConnectAsync(ip, port); 
            Console.WriteLine($"Подключение выполнено по ip {ip} и порту {port}"); 
            return true; 
        } 
        catch (Exception ex) 
        { 
            Console.WriteLine($"Подключение не выполнено: {ex.Message}"); 
            return false; 
        } 
    } 
 
    public static async Task WriteMessageAsync(string msg) 
    { 
        byte[] buffer = Encoding.UTF8.GetBytes(msg); 
        await socket.SendAsync(new ArraySegment<byte>(buffer), SocketFlags.None); 
        await ProcessMessageAsync(); 
    } 
 
    private static async Task ProcessMessageAsync() 
    { 
        var buffer = new byte[4096]; 
        int bytesRead = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None); 
        Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, bytesRead)); 
    } 
} 
 
class Server 
{ 
    static TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 2000); 
    static bool isWorking = false; 
 
    public static async Task StartAsync() 
    { 
        listener.Start(); 
        isWorking = true; 
 
        while (isWorking) 
        { 
            TcpClient client = await listener.AcceptTcpClientAsync(); 
            _ = ProcessMessageAsync(client); 
        } 
    } 
 
    private static async Task ProcessMessageAsync(TcpClient client) 
    { 
        using (NetworkStream stream = client.GetStream()) 
        { 
            byte[] buffer = new byte[client.ReceiveBufferSize]; 
            int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length); 
 
            await Task.WhenAll(Server.GetClients().ConvertAll(s => s.WriteAsync(buffer, 0, bytesRead))); 
        } 
    } 
 
    public static void Stop() 
    { 
        listener.Stop(); 
        isWorking = false; 
    } 
} 
 
class Program 
{ 
    static async Task Main(string[] args) 
    { 
        await Server.StartAsync(); 
         
        // Пример использования: 
        Client client = new Client(); 
        await client.ConnectAsync(); 
 
        await client.WriteMessageAsync("Hello, server!"); 
 
        Server.Stop(); 
    } 
} 
 
Аватар пользователя
Искусственный Интеллект

Не можешь на телефоне открыть два окна, тестируй в рамках одного приложения. Каждый раз тестировать код через "ответы" это бесперспективно.