Код клиента:
class PipeClient
{
static void Main()
{
string strIn,IN="",strA,strB;
string[] str;
int A, B, N;
int[] arr;
NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", "Marchosias", PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation);
pipeClient.Connect();
StreamWriter sw = new StreamWriter(pipeClient);
StreamReader sr = new StreamReader(pipeClient);
sw.AutoFlush = true;
while ((strIn = sr.ReadLine()) != null)
{
IN += strIn + ",";
}
Console.WriteLine("Received from server: {0}", IN);
str = strIn.Split('\n');
str = str.Where(t => t != "").ToArray();
strA = str[0];
strB = str[1];
Console.WriteLine("------[n]");
Console.WriteLine(str.Count());
N = str.Count() - 2;
arr = new int[N];
A = Convert.ToInt32(str[0]);
B = Convert.ToInt32(str[1]);
for (int i = 2; i < str.Length; i++)
arr[i-2] = Convert.ToInt32(str[i]);
Console.WriteLine("------N");
Console.WriteLine(N);
Console.WriteLine("------A");
Console.WriteLine(A);
Console.WriteLine("------B");
Console.WriteLine(B);
Console.WriteLine("------[i]");
for (int j = 0; j < arr.Length; j++)
{
Console.Write(arr[j]);
if (arr[j] > A && arr[j] < B)
{
Console.WriteLine("+");
}
else
Console.WriteLine("-");
}
Console.ReadKey();
}
}
}
Код сервера:
class PipeServer
{
static int n = 5;
static int a = 1;
static int b = 4;
static int[] X = {0,1,2,3,4};
static StreamWriter sw;
static StreamReader sr;
static void Main()
{
Process proc = new Process();
proc.StartInfo.FileName = @"C:\NamedPipes_p\bin\Debug\NamedPipes_p.exe";
proc.Start();
Thread thr = new Thread(new ThreadStart(ServerThread));
thr.Start();
Console.ReadLine();
}
private static void ServerThread()
{
try
{
NamedPipeServerStream pipeServer = new NamedPipeServerStream("Marchosias", PipeDirection.InOut, 1, PipeTransmissionMode.Message);
sw = new StreamWriter(pipeServer);
sr = new StreamReader(pipeServer);
Console.WriteLine("Waiting For Connection");
pipeServer.WaitForConnection();
Console.WriteLine("Client connected.");
sw.AutoFlush = true;
sw.WriteLine(a.ToString());
sw.WriteLine(b.ToString());
for (int t = 0; t < X.Length; t++)
{
sw.WriteLine(X[t].ToString());
}
pipeServer.Disconnect();
Console.WriteLine("Client disconnected.");
}
catch (IOException e)
{
Console.WriteLine("ERROR: {0}", e.Message);
Console.ReadKey();
}
}
}
Вопрос: Как вернуть значение на сервер? И как его прочесть?
Переделал код под BinaryReader/BinaryWriter
- все работает как часы. Почему не работало со Stream
'ом - ума не приложу.
Может кому-то пригодится:
Код сервера:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Pipes;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
using System.Threading;
using System.Security.Principal;
namespace NamedPipes
{
class PipeServer
{
static int n;// = 5;
static int a;// = 1;
static int b;// = 4;
static int[] X;// = {0,1,2,3,4};
static NamedPipeServerStream pipeServer;
static void Main()
{
Input();
Process proc = new Process();
proc.StartInfo.FileName = @"C:\NamedPipes_p\bin\Debug\NamedPipes_p.exe";
proc.Start();
Thread.Sleep(1000);
Thread thr = new Thread(new ThreadStart(ServerThread));
thr.Start();
Console.ReadLine();
}
private static void Input()
{
Console.WriteLine("Input n: ");
n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Input array: ");
X = new int[n];
for (int i = 0; i < n; i++)
{
Console.Write("[{0}] = ", i);
X[i] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("Input a: ");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Input b: ");
b = Convert.ToInt32(Console.ReadLine());
}
private static void ServerThread()
{
try
{
using (pipeServer = new NamedPipeServerStream("Marchosias", PipeDirection.InOut))
using (BinaryWriter bw = new BinaryWriter(pipeServer))
using (BinaryReader br = new BinaryReader(pipeServer))
{
Console.Write("Waiting For Connection........");
pipeServer.WaitForConnection();
if (pipeServer.IsConnected == true)
{
Console.WriteLine("Connected.");
bw.Write(n+2);
bw.Write(a);
bw.Write(b);
for (int t = 0; t < X.Length; t++)
{
bw.Write(X[t]);
}
}
pipeServer.WaitForPipeDrain();
Thread.Sleep(4000);
Console.WriteLine("Result: {0} ", br.ReadString());
pipeServer.Disconnect();
}
}
catch (IOException e)
{
Console.WriteLine("ERROR: {0}", e.Message);
Console.ReadKey();
}
}
}
}
Код клиента:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading;
namespace NamedPipes_p
{
class PipeClient
{
static void Main()
{
string OUT = "";
int A, B;
int N;
int[] arr;
using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "Marchosias", PipeDirection.InOut))
using (BinaryWriter bw = new BinaryWriter(pipeClient))
using (BinaryReader br = new BinaryReader(pipeClient))
{
Console.Write("Attempting to connect to pipe......");
pipeClient.Connect();
Console.WriteLine("Connected.");
Console.WriteLine("There are currently {0} pipe server instances open.", pipeClient.NumberOfServerInstances);
Console.Write("Receiving data.......");
N = br.ReadInt32();
A = br.ReadInt32();
B = br.ReadInt32();
Console.WriteLine("Done.");
Console.WriteLine("n={0} a={1} b={2}",N,A,B);
arr = new int[N-2];
for (int f = 0; f < N-2; f++)
{
arr[f] = br.ReadInt32();
Console.WriteLine("Arr[{0}] = {1}", f,arr[f]);
}
Thread.Sleep(4000);
for (int j = 0; j < arr.Length; j++)
{
if (arr[j] > A && arr[j] < B)
{
OUT += arr[j].ToString() + " ";
}
}
bw.Write(OUT);
Environment.Exit(0);
}
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем привет! Возник такой вопросКак сделать GET или POST запрос на сервер с uwp программы написанной на C#? И получить ответ? Ответ получаю в JSON
Поставил пакет разработки расширений для офиса, но в списке шаблонов не могу найти Access, хотя все остальные шаблоны офисных проектов присутствуют(Word,...