Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2021, 18:07   #1
Vetrooff
Новичок
Джуниор
 
Регистрация: 22.10.2021
Сообщений: 1
По умолчанию отправка сообщения через сокет

Почему при первом запуске клиента цикл в сервере на отправку сообщения срабатывает 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);
}
}
}
}
Vetrooff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка e-mail сообщения с форматированием через SMTP chandrasecar Работа с сетью в Delphi 1 10.09.2014 21:29
Отправка RECORD через сокет abort_halt Работа с сетью в Delphi 3 21.08.2013 20:06
Отправка картинки через сокет Stepan_AVR Работа с сетью в Delphi 4 28.10.2011 16:58
Отправка сообщения через компонент RzSendMessage artemavd Работа с сетью в Delphi 0 01.04.2010 07:43
Не работает отправка файла через сокет SARGE Работа с сетью в Delphi 0 29.01.2009 13:29