我正在研究我的示例代码,其中我想显示从服务器到客户端屏幕的数字数组。
基本上,我首先让服务器创建一个由99个随机生成的数字组成的数组,其值为1 - 100,将数组转换为字符串,然后使用字节发送将字符串传输到服务器。
代码如下:
//SERVER
int[] result = GenerateNumbers();
string resultingString = "";
for (int i = 0; i < result.Length; i++)
resultingString = resultingString + result[i] + ",";
s.Send(asen.GetBytes(resultingString));
//CLIENT
byte[] bb = new byte[1000];
int k = stm.Read(bb, 0, 1000);
for (int i = 0; i < k; i++)
{
Console.Write(Convert.ToChar(bb[i]));
}
现在我要做的是在客户端屏幕中显示生成的数组。我的代码目前可以做到这一点。但是,使用Console.Write()
命令,它会一直显示字符串,直到它结束。如下例所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 93 94 95 96 97 98 99
我现在要做的是使显示格式如下:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 . . . . . . . . . .
90 91 92 93 94 95 96 97 98 99
有人可以指点我这么做的好方法吗? :)
答案 0 :(得分:4)
String.PadLeft就是您所追求的 - 这将使用您选择的填充字符填充给定字符串的左侧以使其长n个字符。
打破你需要的每个第n个号码(在你的Console.Write(...)之后;):
if((i % n) == 0) {
Console.WriteLine();
}
答案 1 :(得分:1)
我认为您的客户存在问题。你发送一个逗号分隔的字符串,我没有看到你处理它。 我假设使用了UTF8。 我希望这会有所帮助:
//CLIENT
//Makes an array to hold stream content
var bb = new byte[stm.Length];
//Fill the array with the stream content
stm.Read(bb, 0, (int)stm.Length);
//Converts the array of bytes back to a string
var rcvString = System.Text.UTF8Encoding.UTF8.GetString(bb);
//Split the string into an array using "," as separator
var array = rcvString.Split(new string[]{","},
StringSplitOptions.RemoveEmptyEntries);
var pad = 2;
var inc = 20;
var max = array.Length;
//Iterates through the array in "inc" intervals
for (var i = 0; i < max; i+=inc)
{
//Iterates through a section of the array determined by "i" and "inc"
//(there is a special case if "inc" it's not a multiple of max)
for (var j = 0; j < (max - i > inc ? inc : max - i); j += 1)
{
Console.Write(String.Format(@" {0}",array[i + j].PadLeft(pad)));
}
Console.WriteLine();
}
答案 2 :(得分:0)
使用Console.WriteLine Method打破适当值的新行..