小编Spo*_*oky的帖子

在C#中侦听ICMP数据包

我有一个SIP应用程序需要发送UDP数据包来设置SIP呼叫.SIP具有应对传递失败的超时机制.我希望能够做的另一件事是检测UDP套接字是否已关闭,以便必须等待SIP使用的32s重新传输间隔.

我所指的情况是,尝试发送到UDP套接字导致远程主机生成ICMP目标无法访问的数据包.如果我尝试将UDP数据包发送到已启动的主机但端口未侦听,我可以看到ICMP消息通过数据包跟踪器返回,但问题是如何从我的C#代码访问该数据?

我正在玩原始套接字,但尚未能够获得我的程序接收的ICMP数据包.即使ICMP消息到达我的PC,下面的示例也从未收到数据包.

Socket icmpListener = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
icmpListener.Bind(new IPEndPoint(IPAddress.Any, 0));

byte[] buffer = new byte[4096];
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
int bytesRead = icmpListener.ReceiveFrom(buffer, ref remoteEndPoint);
logger.Debug("ICMPListener received " + bytesRead + " from " + remoteEndPoint.ToString());
Run Code Online (Sandbox Code Playgroud)

下面是一个wireshark跟踪,显示ICMP响应进入我的PC,尝试从我知道它没有收听的端口上发送UDP数据包从10.0.0.100(我的PC)到10.0.0.138(我的路由器).我的问题是如何利用这些ICMP数据包来实现UDP发送失败而不是仅仅等待应用程序在任意时间段后超时?

ICMP响应UDP发送

c# icmp

7
推荐指数
1
解决办法
2万
查看次数

为什么Sytem.totalMemory不断增加?

我有这个空白项目,只是为了检查System.totalMemory变量.据我所知,我得到这个值:

3076
3092
3096
3088
3092
3096
3100
3104
3108
3112
3117
3121
3125
3129
3133
3137
3141
3145
3149
...
And so on
Run Code Online (Sandbox Code Playgroud)

我没有打开Flash,没有Internet浏览器,没有其他闪存实例.

该项目为空白,只有一个静态文本和一个动态文本,称为"内存".一个*.as文件,包含以下代码:

package{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.system.System;
    import flash.text.TextField;
    public class Test extends Sprite {
        public function Test() {
            this.addEventListener(Event.ENTER_FRAME,Loop);
        }
        public function Loop(e:Event) {
            memory.text = String(System.totalMemory);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是我的发布设置.

http://i.stack.imgur.com/3k1vq.png http://i.stack.imgur.com/rwM1D.png

我在Debug和Published*.swf中测试了相同的结果.

我对此没有任何线索,所以请帮忙.

memory flash actionscript actionscript-3

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

使用名为"PropertiesController"的控制器的ASP.NET MVC路由

尝试使用名为PropertiesController的控制器(以及随后的路由)时,我遇到了一个棘手的问题(因为我是MVC的新手).

我相信这是因为我的解决方案中有一个名为"Properties"的目录(我无法删除).这有什么方法吗?

路线设置只是一条简单的路线:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Properties", action = "List", id = "" } // Parameter defaults 
);
Run Code Online (Sandbox Code Playgroud)

并且在请求" http:// localhost/aptment2/properties / " 时我在IIS7中得到的错误是:

替代文字

当然有一种方法可以找到我找不到的方法吗?干杯.

asp.net asp.net-mvc routing iis-7

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

各种AccuRev版本号有哪些?

在AccuRev中,当我查看文件的历史记录(在"历史记录模式"下)时,我会看到对文件执行的操作列表.每个动作都有一个数字(#)和一个版本.

当我单击其中一个操作时,会出现另一个列表,显示操作中涉及的每个文件(包括我正在调查其历史记录的文件).该下面板中的每个条目都具有"虚拟版本"和"真实版本".

顶部面板中的"版本"似乎与下部面板中我的文件的"虚拟版本"相同.

#,虚拟版和真实版有什么区别?为什么虚拟版本和真实版本有两个用斜杠分隔的数字?

accurev

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

谷歌浏览器:滚动条的焦点问题

我正在使用jQuery 1.3.2.

表单中有一个输入字段.单击输入字段会打开div作为下拉列表.div包含一个项目列表.由于列表大小很大,div中有一个垂直滚动条. 替代文字

要在外部单击时关闭下拉列表,输入字段上会出现模糊事件.

现在的问题是:

在chrome(2.0.172)中,当我们单击滚动条时,输入字段将失去焦点.现在,如果您单击外部,则下拉菜单将不会关闭(因为当您单击滚动条时输入已经失去焦点)

在Firefox(3.5),IE(8),opera(9.64),safari()中,当我们点击滚动条时,输入字段不会松散焦点.因此,当您单击外部(单击滚动条后)时,下拉菜单将关闭.这是预期的行为.

所以在Chrome中点击滚动条,然后如果我点击外部下拉列表将不会关闭.我怎么能用chrome解决这个问题.

javascript jquery google-chrome cross-browser scrollbar

7
推荐指数
2
解决办法
1万
查看次数

有没有办法使用PHPUnit只使用PHP测试API请求和响应?

响应是JSON,我使用的是定制的MVC框架,我不确定如何生成请求和响应过程.使用以下语法创建服务方法.

public function getSessionsMethod()
{
    // data auto encoded as JSON
    return array('hello', 'world');
}
Run Code Online (Sandbox Code Playgroud)

JavaScript的请求看起来像这样/svc/api/getSessions.我最初的想法是简单地使用流方法是否有这种形式的测试的最佳实践?

public function testCanGetSessionsForAGivenId()
{
    $params = http_build_query(
        array(
            'id' => 3,
        )
    );
    $options = array(
        'http' => array(
            'method'  => 'GET',
            'content' => $params,
            )
        );
    $context  = stream_context_create($options);
    $response = file_get_contents(
        'http://vbates/svc/api/getSessions', false, $context
    );
    $json     = json_decode($response);
    $this->assertEquals(3, $json->response);
}
Run Code Online (Sandbox Code Playgroud)

phpunit

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

通过PostMessage发送/接收字符串

虽然网上有一些资源可以解决这个粗略的话题,但我仍然没有找到适合我的答案.

我希望在我的VB.net进程和我的C++进程之间进行完全的通信.我希望能够将一个字符串发送到从C++的过程,但暂时我需要实现:

将字符串发送C++进程并进行处理.

这创造了一些我不确定的要点,但我会尽量保持这个简单......

VB中使用以下函数声明;

Declare Function PostMessage Lib "user32" Alias "PostMessageA" ( _
    ByVal hWnd As IntPtr, _
    ByVal Msg As UInteger, _
    ByVal wParam As IntPtr, _
    ByVal lParam As String _
) As Boolean
Run Code Online (Sandbox Code Playgroud)

并发送这样的消息;

PostMessage(hWnd, SM_PING, Nothing, "schlampe")
Run Code Online (Sandbox Code Playgroud)

使用以下方法声明来捕获C++中的消息;

LRESULT CALLBACK newWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Run Code Online (Sandbox Code Playgroud)

并测试我是否可以使用;

char buffer[50];
sprintf(buffer, "Received: %s", (char *)lParam);
MsgBox(buffer);
Run Code Online (Sandbox Code Playgroud)


我浏览了许多我认为没必要的细节,但是请问并将它给予你.

我的问题是消息 …

c++ vb.net winapi param wndproc

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

使用JMX获取线程CPU时间的有效方法

我目前使用JMX以下列方式获得总线程CPU时间:

private long calculateTotalThreadCpuTime(ThreadMXBean thread) {

    long totalTime = 0l;

    for (ThreadInfo threadInfo : thread.dumpAllThreads(false, false))
        totalTime += thread.getThreadCpuTime(threadInfo.getThreadId());

    return totalTime;
}
Run Code Online (Sandbox Code Playgroud)

由于ThreadMXBean实际上是一个远程代理,性能是可怕的,这个实际方法调用的大小为秒.

有更快的方法吗?


更新:我正在使用它进行性能监控.测量结果是"挂钟"时间和JProfiler,显示我花费大约85%的时间用于此方法.我确实有一些其他MXBean调用(运行时,内存,GC),但它们便宜得多.很可能是因为每次呼叫thread.getThreadCpuTime都是远程呼叫.

更新2:显示性能问题的JProfiler屏幕截图.

替代文字

java jmx

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

如何在Windows上的Komodo IDE 5.1中启用PerlCritic支持?

我正在尝试在Komodo中启用PerlCritic支持.

来自ActiveState的官方消息,Komodo IDE 5.1(Win 32)的制造商是:

"要启用PerlCritic支持,请安装'Perl-Critic'和'批评'模块."

好吧,安装Perl-Critic是件小事:

ppm install Bundle-Perl-Critic
Run Code Online (Sandbox Code Playgroud)

但是,我搜索了PPM4中的每个存储库(麻烦和常见的嫌疑人),他们似乎没有名为"批评"的模块.我已经使用CPAN和PPM安装了许多模块,但到目前为止,这个模块被证明是最难以捉摸的.我在这里错过了什么吗?

有没有人有幸在Windows上的Komodo 5.1中支持PerlCritic?期待您的回复.该功能在MacOS和Linux中完美运行,但是......嗯.

替代文字

ide perl winapi komodo perl-critic

6
推荐指数
2
解决办法
1311
查看次数

调用 MediaWiki-API 时,我只得到 '+\' 作为 csrf-token

我可以使用简单的令牌 '+\' 进行编辑,但使用这个简单的令牌,我只能作为未注册的 IP 进行编辑,而不能作为注册用户进行编辑。有人能帮我吗?

我的PHP代码:

$parameters = array('action' => 'query', 'meta' => 'tokens', 'format' => 'json');
$options = array(
   'http' => array(
      'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
      'method'  => 'POST',
      'content' => http_build_query($parameters),
    ),
);
$context  = stream_context_create($options);
$result = file_get_contents($wiki, false, $context);
echo "$result";
Run Code Online (Sandbox Code Playgroud)

php mediawiki

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