Запускаю сервер, потом клиент, отправляю сообщение с клиента, все отображается, набираю второе, жму Enter, сообщение не отправляется, а консоль клиента исчезает. В чем проблема?
Сервер:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Net;
namespace Server
{
class Program
{
static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
static void Main(string[] args)
{
socket.Bind(new IPEndPoint(IPAddress.Any, 904)); // привязка к адрессу
socket.Listen(2); // кол-во подключений
Socket client = socket.Accept();
Console.WriteLine("Новое подключение");
byte[] buffer = new byte[1024];
client.Receive(buffer); // получаем данные
Console.WriteLine(Encoding.ASCII.GetString(buffer)); // раскодировка
Console.ReadLine();
}
}
}
Клиент:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
namespace Client
{
class Program
{
static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
static void Main(string[] args)
{
socket.Connect("127.0.0.1", 904);
while (true)
{
string message = Console.ReadLine();
byte[] buffer = Encoding.ASCII.GetBytes(message);
socket.Send(buffer);
}
}
}
}
Вот вам пример socket сервера:
public class StateObject
{
public Socket workSocket = null;
public const int BufferSize = 1024;
public byte[] buffer = new byte[BufferSize];
public StringBuilder sb = new StringBuilder();
}
public class AsynchronousSocketListener
{
public static ManualResetEvent allDone = new ManualResetEvent(false);
public AsynchronousSocketListener()
{
}
public static void StartListening()
{
byte[] bytes = new byte[1024];
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 904);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(2);
while (true)
{
allDone.Reset();
Console.WriteLine("Ожидание соединения...");
listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
allDone.WaitOne();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public static void AcceptCallback(IAsyncResult ar)
{
allDone.Set();
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar);
StateObject state = new StateObject
{
workSocket = handler
};
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
}
public static void ReadCallback(IAsyncResult ar)
{
String content = String.Empty;
StateObject state = (StateObject)ar.AsyncState;
Socket handler = state.workSocket;
int bytesRead = handler.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
Console.WriteLine($"Сообщение: {state.sb.ToString()}");
}
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
}
static void Main(String[] args)
{
StartListening();
return;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день! Ситуация такая: есть скрипт (jquery), который ищет форму (поле) и делает ейfocus()