У меня есть массив, в котором количество элементов генерируется случайным образом от 1 до 11, а значения также генерируются случайным образом от 0 до 254. Я хотел бы отправить эти значения с клиента на сервер и записать исходный массивзначения с Console.WriteLine()
.Я пытался в течение нескольких дней, и я пробовал много вариантов, но я не мог решить эту проблему.Я поделился кодом, который, как мне кажется, был самым близким, но сервер отправил ошибку, подобную этой: «Ввод не является допустимой строкой Base-64, так как она содержит неосновной 64-символ, более двух символов заполнения или несимвол пробела среди дополнительных символов ». После этого я попытался заменить (« - »,« + ») на (« _ »,« / »), но это не сработало.Программа клиента:
static void Main(string[] args)
{
Random rnd = new Random();
byte[] array = new byte[rnd.Next(1, 11)];
for (int i = 0; i < array.Length; ++i)
{
array[i] = (byte)rnd.Next(255);
Console.WriteLine(array[i]);
}
System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
clientSocket.Connect("111.11.11.111", 8888);
while (true)
{
NetworkStream serverStream = clientSocket.GetStream();
string str = Convert.ToBase64String(array);
byte[] outStream = System.Text.Encoding.UTF8.GetBytes(str);
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
}
}
Программа сервера:
IPAddress ipAd = IPAddress.Parse("111.11.11.111");
TcpListener serverSocket = new TcpListener(ipAd, 8888);
TcpClient clientSocket = default(TcpClient);
serverSocket.Start();
Console.WriteLine("*****Server started*****");
clientSocket = serverSocket.AcceptTcpClient();
Console.WriteLine("Accepted connection from client");
while(true)
{
try
{
NetworkStream networkStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[10025];
if(networkStream.DataAvailable)
{
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
string dataFromClient = System.Text.Encoding.UTF8.GetString(bytesFrom);
byte[] decByte = Convert.FromBase64String(dataFromClient);
foreach (var item in decByte)
{
Console.WriteLine(item.ToString());
}
networkStream.Flush();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Этот код прекрасно работает в том же консольном приложении, но, вероятно, он не работает между клиентом исервер:
string str = Convert.ToBase64String(array);
Console.WriteLine(str);
byte[] decByte = Convert.FromBase64String(str);
Console.WriteLine(decByte[0]);
Я мог бы слишком усложнить все это, но в конце я так запутался.Мне даже нужно кодировать, если у меня уже есть байтовый массив?Может ли кто-нибудь показать мне самый простой способ или способы, как это можно сделать?Заранее благодарю за ваше время и помощь.