【问题标题】:Why does does my client only show 1 digit of a factorial when the server sent the value via a socket connection?当服务器通过套接字连接发送值时,为什么我的客户端只显示 1 位阶乘?
【发布时间】:2022-01-03 10:48:15
【问题描述】:

客户:

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 位或更高位阶乘的数字将只显示该数字的第一位。

It only show the first digit of the factorial

【问题讨论】:

    标签: c# sockets


    【解决方案1】:

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

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

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

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

    你的代码应该可以工作。

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多