Immortalwings 2019-03-14 12:38 采纳率: 0%
浏览 279
已采纳

C#怎么写出开服器中的控制台

C#怎么写出开服器中的控制台

控制台就类似这样可以显示信息的控制台

不用很复杂,实现功能就可以了
图片说明

  • 写回答

1条回答 默认 最新

  • lwy324 2019-03-14 14:00
    关注

    private TcpClient client = null;
    private TcpListener server = null;
    private bool stopped = false;
    private void button1_Click(object sender, EventArgs e)
    {
    //IPAddress localIp = Dns.GetHostAddresses("localhost")[0];
    server = new TcpListener(12345);
    server.Start();
    showInfo("服务端启动 ..");
    Thread thServer = new Thread(serverHandler) { IsBackground = true};
    thServer.Start(server);
    client = new TcpClient();
    client.Connect("127.0.0.1", 12345);
    if (client.Connected)
    showInfo("客户端已经连接: " + client.Client.RemoteEndPoint.ToString());
    else
    showInfo("未连接上服务端.");
    if (client.Connected)
    {
    Thread th = new Thread(clientHandler) { IsBackground = true };
    th.Start(client);
    }
    }
    private void serverHandler(object obj)
    {
    TcpListener svr = (TcpListener)obj;
    while (!stopped)
    {
    try
    {
    TcpClient tcpClient=null;
    if (svr.Pending())
    {
    tcpClient = svr.AcceptTcpClient();
    Thread th = new Thread(serverClientHandler) { IsBackground = true };
    th.Start(tcpClient);
    showInfo("服务端接收连接, 并开始通讯: " + tcpClient.Client.RemoteEndPoint.ToString());
    }
    else
    {
    showInfo("暂时无连接请求:");
    Thread.Sleep(60000);
    }
    }
    catch(Exception ex)
    {
    showInfo("服务端监听连接异常: " + ex.Message);
    Thread.Sleep(1000);
    }
    }
    }
    // 服务端处理连接
    private void serverClientHandler(object obj)
    {
    byte[] buf = new byte[1024];
    TcpClient client = (TcpClient)obj;
    while (!stopped && client.Connected)
    {
    try
    {
    showInfo("等待客户端指令 ..");
    int count = client.Client.Receive(buf);
    if (count > 0)
    {
    //parse
    string cmd = Encoding.Default.GetString(buf, 0, count);
    showInfo("收到客户端指令: " +cmd);
    switch (cmd)
    {
    case "OK":
    client.Client.Send(Encoding.Default.GetBytes(cmd));
    break;
    default:
    break;
    }
    }
    }
    catch (Exception ex)
    {
    showInfo("接收客户端指令超时: " + ex.Message);
    }
    }
    }
    // 客户端处理连接
    private void clientHandler(object obj)
    {
    byte[] buf = new byte[1024];
    TcpClient client = (TcpClient)obj;
    client.Client.Send(Encoding.Default.GetBytes("OK"));
    while (!stopped && client.Connected)
    {
    try
    {
    int count = client.Client.Receive(buf);
    if (count > 0)
    {
    //parse
    }
    }
    catch (Exception ex)
    {
    showInfo("接收服务端数据超时: " + ex.Message);
    }
    }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 8月4日

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示