小编Fus*_*ght的帖子

控制台选择会停止应用

我正在我的服务器上运行一个套接字服务器,我醒来时发现了许多有关其无法访问的消息.事实证明,在我上床睡觉之前,我在窗口中突出显示了一个IP地址,忘记按Enter键以恢复该过程.

这就是我现在在控制台中禁用选择的方法,但我仍然希望能够在没有应用程序暂停的情况下进行选择.

    #region Disable Quick-Edit Mode
    [DllImport("kernel32.dll")]
    static extern bool SetConsoleMode(IntPtr hConsoleHandle, int mode);

    [DllImport("kernel32.dll")]
    static extern bool GetConsoleMode(IntPtr hConsoleHandle, out int mode);

    [DllImport("kernel32.dll")]
    static extern IntPtr GetStdHandle(int handle);

    const int STD_INPUT_HANDLE = -10;
    const int ENABLE_EXTENDED_FLAGS = 0x80;

    public static void DisableQuickEditMode()
    {
        int mode;
        IntPtr handle = GetStdHandle(STD_INPUT_HANDLE);
        GetConsoleMode(handle, out mode);
        mode |= ENABLE_EXTENDED_FLAGS;
        SetConsoleMode(handle, mode);
        mode &= ~ENABLE_QUICK_EDIT;
        SetConsoleMode(handle, mode);
    }
Run Code Online (Sandbox Code Playgroud)

我真的不想回到命令提示符的传统模式,因为它确实有助于拥有这些新功能(特别是开发人员),但我需要找到一种方法来阻止应用程序在我暂停时停止安慰.有趣的是,当我今天早上点击Enter时,处理了所有已尝试的连接,然后在处理它们之后,它们被丢弃.这让我想知道,或许,我正在编写错误的应用程序; 我需要一个"控制台"线程和一个"服务器"线程.但我不确定这甚至会有所作为.

c# console dllimport

5
推荐指数
1
解决办法
1162
查看次数

Switch-Case数据包处理的替代方案

我一直在玩网络套接字,我的大多数问题都来自Windows Forms,但是我已经研究了很多程序,比如私有服务器模拟器,我对我的数据包处理感到不满意.

每个消息都以JSON格式化,如下所示:

{
"id":201,
"Message":"Hello, World.",
"User":"System",
"Color":"LawnGreen"
}
Run Code Online (Sandbox Code Playgroud)

"id"是所有数据包中的常量,它将识别数据包的功能.具有相同ID的数据包(以下称为标题)将始终具有相同的键,但不一定具有相同的值(duh,有人说).

我将JSON反序列化为动态并在数据包的标题上执行切换案例,如下所示:

switch((int)jsonPacket.id)
{
    case 201:
    ...
}
Run Code Online (Sandbox Code Playgroud)

鉴于这是一个非常小规模的聊天应用程序,甚至几乎没有开始尝试和实现所有IRC的功能,我是否仍然应该关注并不满意我的实现?小型游戏/测试台服务器使用相同的方法,但我不想在功能和性能方面限制自己,或者如果它变得令人讨厌.

任何想法都会有帮助.

c# sockets json packet switch-statement

1
推荐指数
1
解决办法
616
查看次数

标签 统计

c# ×2

console ×1

dllimport ×1

json ×1

packet ×1

sockets ×1

switch-statement ×1