uuuuuu10248 2021-12-31 16:21 采纳率: 60%
浏览 115
已结题

关于毕设的一个问题,Java||C#

问题背景:
简单描述一下,本人毕设想做一个本地不需联网的单机客户服务器系统
几个客户机可以给服务器发送信息。服务器作为前台,客户机是服务员。

奈何本人本科期间虽认真学过Java语法和算法以及C#但还是感觉无从下手

问题1:
Java的界面设计本科几乎没有涉及,学的都是一些老掉牙的技术,本科教材是2001年的。不过我可以自学,就是问下,java或c#可以实现我所描述的功能吗?任务量重不重呢?

问题2:
写好的java或c#程序怎么能单独打包出来成咱们用的app的样子呢?总不能每次运行都要先打开eclipse吧?

先谢谢佬们了!!

  • 写回答

4条回答 默认 最新

  • include_iostream_ 2021-12-31 16:43
    关注

    大致叙述

    问题1

    我不知道你要用C/S还是B/S架构;从“客户机”来看似乎是要实现C/S架构,但你的需求描述在我看来还是有点模糊。这里我还是分开来讲。
    B/S的web系统的话,springboot+vue就是为初学者、轻量级开发而生的(事实上也可以做到企业级开发,我们这里只是说这个技术栈门槛比较低,容易学),基本两三个月就能用这个技术栈做出管理系统。
    C/S架构的话,我个人并不熟悉java的有关技术栈,但是C#的WPF是相当简单易学的;值得一提的是C#的.NET技术也适用于B/S架构开发(但我个人认为比springboot+vue要麻烦)。但既然你是写服务器-客户端交互的软件,那么网络访问肯定是不可避免的;退一步讲,就算你不用网络,也总得用什么方法建立客户端和服务端的通信对吧?可以用CAN,RS232等很多协议,但都比网络要麻烦。
    此外在选择C/S还是B/S的时候有一个要注意的地方:B/S架构有很多封装好的框架,比如springboot,甚至不需要去关心通信细节,只要写好接口就可以,使用C/S无论如何恐怕都比B/S的这些架构要更加复杂。

    问题2

    不同语言不太一样。java就用java指令,C#的话,简单程序应该是双击打开就可以,需要命令行参数的话我就不太清楚了。

    细节

    我们再说说细节方面的东西。

    C/S架构下如何启动程序?

    Java需要使用java指令。建议考虑maven,maven使用mvn package打包出来的jar文件,比如说叫做a.jar,那么执行就是java -jar a.jar。
    C#的话,没有命令行参数应该是双击打开即可,有的话就得用CLI界面。

    技术栈的任务量比较

    B/S架构

    SpringBoot+Vue3技术栈非常容易实现。前者需要了解Java,后者需要了解Node.js;都只需要了解基本语法和框架API,完全不需要了解底层原理,工作量非常少(对毕设而言)。
    如果不分离前后端的话,可以舍弃Vue,学习成本可能少一些,但工作量可能会大一些。

    C/S架构

    客户端技术栈比较复杂,我只用过Qt,工作量肯定比硬写C++要少,但仍然比SpringBoot+Vue复杂。C#的话,优势主要在WPF易用,界面可以直接画,但是仍然需要考虑写通信控制逻辑,而SpringBoot是不需要自己写控制逻辑的,但可以进行优化。
    我个人的意见是:SpringBoot+Vue是工作量最少的,但普通本科一般不教,学习成本大一些。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 码老头 2022-01-01 15:25
    关注

    使用C#+Signalr可以比较轻松实现你的需求,代码量也很少,一个服务端,一个客户端,总代码量不到100行。

    先看演示效果:

    img

    解决方案目录:

    img

    服务端示例代码:

    MessageHub.cs

    using Microsoft.AspNetCore.SignalR;
    
    namespace ChatDemo.Server.Hubs
    {
        public class MessageHub : Hub
        {
            public Task SendMessage(string user, string message)
            {
                Console.WriteLine($"服务器接收到消息,内容:{user},{message}");
                return Clients.All.SendAsync("ReceiveMessage", user, message);
            }
    
            /// <summary>
            /// Called when a new connection is established with the hub.
            /// </summary>
            /// <returns>A <see cref="T:System.Threading.Tasks.Task" /> that represents the asynchronous connect.</returns>
            public override Task OnConnectedAsync()
            {
                Console.WriteLine($"客户[{Context.ConnectionId}]连接成功.");
                return base.OnConnectedAsync();
            }
        }
    }
    

    Program.cs

    using ChatDemo.Server.Hubs;
    
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddSignalR();
    
    var app = builder.Build();
    
    app.MapHub<MessageHub>("/hub/message");
    app.Run();
    

    客户端

    using Microsoft.AspNetCore.SignalR.Client;
    
    namespace ChatDemo.Client
    {
        public partial class FrmMain : Form
        {
            private HubConnection _connection;
            public FrmMain()
            {
                InitializeComponent();
            }
    
            private async void btnSendMessage_Click(object sender, EventArgs e)
            {
                try
                {
                    await _connection.InvokeAsync("SendMessage", txtUser.Text, txtNewMessage.Text);
                }
                catch (Exception ex)
                {
                    AppendMessage(ex.Message);
                }
            }
    
            private void FrmMain_Load(object sender, EventArgs e)
            {
                _connection = new HubConnectionBuilder()
                    .WithUrl("http://localhost:5025/hub/message")
                    .Build();
                _connection.Closed += async (error) =>
                {
                    await _connection.StartAsync();
                };
                _connection.On<string, string>("ReceiveMessage", (user, message) =>
                {
                    Invoke(() =>
                    {
                        var newMessage = $"{user}: {message}";
                        AppendMessage(newMessage);
                    });
                });
                try
                {
                    _connection.StartAsync();
                    AppendMessage("已成功连接到消息服务器");
                    txtNewMessage.Focus();
                }
                catch (Exception ex)
                {
                    AppendMessage(ex.Message);
                }
            }
    
            private void AppendMessage(string message)
            {
                rtxtMessages.AppendText($"[{DateTime.Now}]==>>{message}{Environment.NewLine}");
            }
        }
    }
    
    评论 编辑记录
  • 小游鱼KF 2021-12-31 16:40
    关注

    你可以把程序打包,然后将包放到服务器上,这样只要你服务器开着,你就可以通过 iP.项目名的方式访问到你所写的程序,至于你说的APP的形式,恐怕你要开发一个 APP 才行,因为在手机上运行的软件基本上都需要网络的支持

    评论
  • ling_hun_ 2021-12-31 17:03
    关注

    你可以去找找C++的课设书 里面好像有个Q友的课设跟你的需求差不多 自己偷点代码差不多了

    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 12月31日

悬赏问题

  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题
  • ¥60 求tc downloader的下载方式
  • ¥15 华为 快捷方式 手电筒 接口
  • ¥15 Qt6.5支不支持Android13开发啊
  • ¥20 网络只能跑一半,应该如何设置
  • ¥20 Python调用百度开发者平台人脸识别接口