@vetrooff
студент

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

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

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);
}
}
}
}


код клиента

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);
}
}
}
}
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы