работа цикла отправки сообщения через сокет с#

vetroff

New Member
Регистрация
22.10.2021
Сообщения
1
Почему при первом запуске клиента цикл в сервере на отправку сообщения срабатывает 1 (выводит число1) раз при повторном запуске клиента срабатывает полностью (выводит 1 2 3 4)

C#:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Net;

using System.Net.Sockets;

using System.Threading;


namespace ServerTest

{

class Program

{


static byte[] buffer = new byte[2024];


static void Main(string[] args)

{


var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


socket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0 .1"), 45008));


socket.Listen(10);

socket.BeginAccept(new AsyncCallback(ClientAccepted), socket); //принять попытку подключения

Console.WriteLine("Server is ready!");


Console.Read();

}


public static void ClientAccepted(IAsyncResult ar)

{

Console.WriteLine("client connect");

var socket = ar.AsyncState as Socket;

var client = socket.EndAccept(ar);


for (int i = 1; i < 5; i++)

{


client.Send(Encoding.UTF8.GetBytes( i.ToString()));


}


client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);

socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);

}



public static void ReceiveMessage(IAsyncResult ar)

{

try

{

var socket = ar.AsyncState as Socket;

var length = socket.EndReceive(ar);

var message = Encoding.Unicode.GetString(buffer, 0, length);

Console.WriteLine(message);


socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

}

}
код клиента

C++:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Net.Sockets;

using System.Net;


namespace ClientTest

{

class Program

{

static void Main(string[] args)

{


var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


socket.Connect("localhost", 45008);

Console.WriteLine("connect to the server");


socket.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(ReceiveMessage), socket);


var message = "Message from client : " + Console.ReadLine();

var outputBuffer = Encoding.Unicode.GetBytes(message);


for (int i = 0; i < 5000; i++)

{

socket.BeginSend(outputBuffer, 0, outputBuffer.Length, SocketFlags.None, null, null);

}



Console.ReadLine();


}


static byte[] buffer = new byte[1024];


public static void ReceiveMessage(IAsyncResult ar)

{


try

{

var socket = ar.AsyncState as Socket;

var length = socket.EndReceive(ar);

Console.WriteLine(length);


var message = Encoding.UTF8.GetString(buffer, 0, length);


Console.WriteLine(message);


}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

}

}
 
Верх Низ