Я использую следующие проекты, чтобы создать асинхронную связь между сервером и клиент. Когда я запускаю эти проекты, я отправляю сообщение от клиента на сервер, поэтому я получил сообщение:
Данные: запись EOF, отправлено 14 байтам клиенту.
Я хочу добиться отправки логической переменной с сервера клиенту с помощью сокетов. Можно ли это сделать, мне интересно, потому что в коде у меня есть сервер, который ждет и слушает, а клиент, который отправляет данные, могу ли я сделать наоборот? В общем, я хочу отправить логическое несколько клиентов. Зачем мне нужен конец файла для отправки строки? Нужно ли конвертировать все в строку?
EDIT. В общем, я хочу отправить переменную с одного компьютера на два других, чтобы процесс начинался одновременно на всех компьютерах. Фактически для создания переключателя, который дает сигнал для начала процесса на 2-3 компьютерах в одно и то же время.
Я попытался использовать следующий код для сервера:
class Program
{
const int PORT_NO = 2201;
const string SERVER_IP = "127.0.0.1";
static void Main(string[] args)
{
//---listen at the specified IP and port no.---
IPAddress localAdd = IPAddress.Parse(SERVER_IP);
TcpListener listener = new TcpListener(localAdd, PORT_NO);
Console.WriteLine("Listening...");
listener.Start();
//---incoming client connected---
TcpClient client = listener.AcceptTcpClient();
//---get the incoming data through a network stream---
NetworkStream nwStream = client.GetStream();
byte[] buffer = new byte[client.ReceiveBufferSize];
//---read incoming stream---
int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
//---convert the data received into a string---
string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received : " + dataReceived);
//---write back the text to the client---
Console.WriteLine("Sending back : " + dataReceived);
nwStream.Write(buffer, 0, bytesRead);
client.Close();
listener.Stop();
Console.ReadLine();
}
}
и для клиента:
class Program
{
const int PORT_NO = 2201;
const string SERVER_IP = "127.0.0.1";
static void Main(string[] args)
{
//---data to send to the server---
string textToSend = DateTime.Now.ToString();
//---create a TCPClient object at the IP and port no.---
TcpClient client = new TcpClient(SERVER_IP, PORT_NO);
NetworkStream nwStream = client.GetStream();
byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textToSend);
//---send the text---
Console.WriteLine("Sending : " + textToSend);
nwStream.Write(bytesToSend, 0, bytesToSend.Length);
//---read back the text---
byte[] bytesToRead = new byte[client.ReceiveBufferSize];
int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize);
Console.WriteLine("Received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead));
Console.ReadLine();
client.Close();
}
}
Как раз в том случае, когда я работаю на одной машине. У меня будет всего 4 машины, и я хочу, чтобы один из них дал сингл остальным из них, чтобы начать запись потока rgb. Таким образом, сервер должен отправить сигнал клиентам для начала записи. Что делать, чтобы изменить поведение сервера для передачи данных, а не прослушивания. Возможно ли, чтобы несколько машин прослушивали и ожидали сигнала?
EDIT:
private void mouseClick1(object sender, MouseEventArgs e)
{
Thread thread = new Thread(() => StartServer());
thread.Start();
if (e.Button == MouseButtons.Left)
{
button5.Enabled = false;
button3.Enabled = true;
try
{
obj = new Capturer();
}
catch (Exception e1)
{
Console.WriteLine("The process failed: {0}", e1.ToString());
}
}
}
private void mouseClick2(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
obj.flag2 = true;
}
}
Мой код, как и сейчас, с функцией левого щелчка startServer() с новым потоком, который является основным кодом в реализации @Ians, и после этого я вызываю свой объект. Когда я щелкаю правой кнопкой мыши, я меняю флаг, и захватчик останавливается. Как я могу остановить сервер или сделать паузу, чтобы снова открыть его с помощью левого клика?