小编MrC*_*rCC的帖子

2侦听同一端口的进程 - .NET不会抛出异常

下图显示了在本地计算机上尝试并成功将侦听套接字(服务器)绑定到端口10000的两个进程:

Sysinternals在端口10000上显示2个绑定

这是netstat的输出(用于确认):

netstat -a -n | find "10000"
  TCP    0.0.0.0:10000          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:10000          0.0.0.0:0              LISTENING
  TCP    [::]:10000             [::]:0                 LISTENING
Run Code Online (Sandbox Code Playgroud)

(注意:javaw.exe进程是第一个在10000上打开listen套接字的进程).

虽然我知道多个进程确实可以在同一个端口(SO_REUSEADDR)上侦听的情况,但在我的特定情况下有些事情让我感到烦恼:

  1. 在我的应用程序中,我特别向.NET说我想要一个独有的 listen socket(SO_EXCLUSIVEADDRUSE)via

    listener = new TcpListener(adr, ipport);
    listener.ExclusiveAddressUse = true;
    
    Run Code Online (Sandbox Code Playgroud)
  2. .NET并没有抛出任何类型的异常/错误/通知该端口已在使用.事实上,它实际上认为一切都很顺利.

  3. 从那时起,我的服务器应用程序永远不会从listener.AcceptTcpClient()呼叫中唤醒.应该与服务器通信的客户端应用程序接收有效连接,但无法与"我的"服务器通信(据推测,因为它建立了与"其他"进程的连接,该进程不会说"协议").

如果有人想尝试重现我的发现:第二个过程是Eclipse(PHP)的"Helios"版本.但具体过程在这里并不重要:如果一个过程可以在操作系统下做奇怪的事情,那么其他过程也是如此.

关于我如何得到错误或完全阻止这种情况(通过附加参数)的任何建议?

.net sockets port networking

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

HTML/CSS格式:单元格< - >单元格之间的TRUE间距,而不是单元格< - >任意之间

我正在寻找关于表格单元格之间间距的提示.我知道 cellspacing/ cellpadding在HTML和他们的CSS等价物border-spacing/ padding,但他们做的更多,我期望他们的名字.我想要实现的是像术语所暗示的cellspacing:单独在单元格之间的间距,而不是单元格与其周围的任何元素之间的间距.

这是一张显示我的意思的照片:

简而言之,我不希望红色箭头所示的间距(即在单元格和表格之间),但我确实需要两个相邻单元格之间的间距.有没有"简单"的方法,或者我是否需要采用繁琐的方式将不同的syles分配给'边界'细胞与'内部'细胞?

html css padding cellspacing cellpadding

13
推荐指数
2
解决办法
4402
查看次数

GSON/JSON:奇怪的特殊字符(变音符号)问题

在尝试使用GSON处理JSON响应时(输出来自flickr API,以防你问)我遇到了我所描述的某些特殊字符的奇怪编码:

原始的JSON响应

这是一个十六进制视图:

原始JSON响应的十六进制视图

'u'后跟'双点'就是德国'ü',这就是我的困惑开始的地方.就好像有人拿了这个字母并把它撕成两半,然后对这两个字母进行编码.下图显示了在'ü'被正确编码的情况下我希望它的十六进制编码:

预期的十六进制视图

更奇怪的是,在我预计会出现问题的情况下(即亚洲字符集),一切似乎都很好,例如"标题":"ナガレテユク···"

问题:

  1. 这是reomeonse的一些flickrAPI奇怪或正确的JSON编码吗?或者是相当正确编码的JSON和它的GSON未能将此响应"重组"到原始的'ü'中.或者标题消息的作者是否只是将其搞砸了?
  2. 我如何解决这个问题(如果它是JSON或GSON那些搞乱,如果它是作者,显然不能做任何事情).我如何知道"其他"字符会受到什么影响(ö和ä会浮现在脑海中,但可能会有更多'特殊情况').

json diacritics gson

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

为什么ListView呈现某些字符的速度这么慢?

更新1:我同时编写了MFC-C ++实现和老式的Win32应用程序,并录制了一段视频,演示了问题的严重程度:

https://www.youtube.com/watch?v=f0CQhQ3GgAM

由于老式的Win32应用程序没有出现此问题,因此使我相信C#和MFC都使用必须导致此问题的同一呈现API(基本上是怀疑我的问题可能出在OS /图形驱动程序级别)。


原始帖子:

当不得不在ListView中显示一些REST数据时,我遇到了一个非常特殊的问题:

对于某些输入,在水平滚动时,ListView渲染在字面上会缓慢地进行爬网。

在我的系统上,使用典型的带有“ OptimizedDoubleBuffer”的子类ListView,在ListView中只有6个项目时,在滚动到我可以看到标题“游动”的点时,渲染速度会变慢,即在编译过程中项目和标题的渲染滚动不匹配。

对于具有10个项目的常规非子类ListView,我可以从字面上看到滚动时分别绘制每个项目(重新绘制大约需要1-2s)。

这是示例代码(是的,我知道它们看起来像熊和蝴蝶的表情;毕竟,从用户提供的数据中发现了这个问题):

using System;
using System.Windows.Forms;

namespace SlowLVRendering
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Load += new System.EventHandler(this.Form1_Load);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            const string slow = "?(  ´??°)? ?????~ ? ( ?(  ´??°)?  ? ?´º?º ?? ) (????)??(  ´??°)? ?????~ ? ( ?(  ´??°)?  ? ?´º?º ?? ) (????)?";
            ListView lv = new ListView();
            lv.Dock = DockStyle.Fill;
            lv.View= View.Details; …
Run Code Online (Sandbox Code Playgroud)

.net c# listview rendering winforms

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

C#:"无法创建静态类的实例"

我正在将一些Java代码转换为C#,偶然发现以下奇怪的事情:

public interface IActivation {
    public abstract double func(double inputput);

    public static class S1 : IActivation {
        public double func(double input) {
            if (input > 0) return 1.0;
            return 0.0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

SomewhereElse(用法):

protected IActivation activation = new IActivation.S1();
Run Code Online (Sandbox Code Playgroud)

看一下原始代码,很清楚这是什么意思:

  1. 声明一个接口并在其中嵌套该接口的几个静态实现(该代码包含IActivation的其他实现,例如"S2","S3"等,这里省略了).
  2. 这种情况的典型使用场景是将变量分配给该接口的一个特定实现.此外,通过您需要实例化该变量的方式,非常清楚这些特定实现所属的位置 - 从某种角度来说,嵌套声明将进一步提高代码的可读性(例如new IActivation.S1();,清楚地表明S1是一个具体实施IActivation).

有趣的是,C#并不喜欢定义整个事物的方式:" 无法创建静态类'IActivation.S1的实例 ".有没有人知道如何重构该代码的方式,以便1.和2.将被保留?

.net c# java static

4
推荐指数
2
解决办法
3849
查看次数