为什么当服务器通过套接字连接发送值时,我的客户端只显示1位阶乘



客户端:

while (true)
{
input = Console.ReadLine();
if (input == "exit")
break;
server.SendTo(Encoding.ASCII.GetBytes(input), Remote);
data = new byte[1024];
recv = server.ReceiveFrom(data, ref Remote);
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("{0}! là: {1}", input, stringData);
}
Console.WriteLine("Dang dong client");
server.Close();

服务器:

while (true)
{
int giaithualap(int n)
{
int giai_thua = 1;
for (int i = 1; i <= n; i++)
giai_thua *= i;
return giai_thua;
}
data = new byte[1024];
recv = newsock.ReceiveFrom(data, ref Remote);
string a = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("Nhan tu : {0} so {1}  ", Remote.ToString(), a);
int tong = giaithualap(int.Parse(a));
Console.WriteLine("{0} so {1} giai thua la {2}", Remote.ToString(), a, tong);
data = Encoding.ASCII.GetBytes( tong.ToString());
newsock.SendTo(data, 0, recv, SocketFlags.None, Remote);
}

如果你输入一个有1位阶乘的数字,它会很好,但一个有2位阶乘或更高阶乘的数值,它只会显示该数字的第一位。

它只显示阶乘的第一个数字

错误在服务器代码的这一行:

newsock.SendTo(data, 0, recv, SocketFlags.None, Remote);

您发送的是recv字节,这是您收到的字节数(在您的示例中,仅为1位(,而不是您想要发送的数量(2位(。将其更改为:

newsock.SendTo(data, 0, data.Length, SocketFlags.None, Remote);

您的代码应该可以工作。

最新更新