是否可以通过localhost/127 ...通过共享相同的端口#来获得两个独立的程序在同一台计算机上进行通信(仅限单向)
我们正在开展一个学生项目,我们需要在两台计算机之间发送包含遥测数据的UDP数据包.生成这些数据包的程序是专有的,但我正在使用System.Net.Sockets.UdpClient和System.Net.IPEndPoint使用C#编写接收程序.
在我们小组的会议期间,当我们连接多台计算机时,我们可以分别运行这两个程序.但是,当我回家并试图扩展遥测处理程序时它并不是很有用,因为我只有一台计算机(我需要一个用于测试处理程序的源程序).我也无法在学校的任何一台计算机上安装该程序.
当我尝试同时在我的计算机上运行这两个程序(最后开始我的程序)时,我得到一个SocketException,说通常只允许使用每个端口.这让我相信必须有一些方法来共享端口(虽然任何时候只有一个程序可以在计算机上使用端口是有意义的,我同时运行多个互联网浏览器没有问题(我假设他们使用端口80作为http)).
编辑的REEDIT:
sipwiz是对的,感谢Kalmi指向UdpClient.Client.Bind()的指针.但是,当时我们正在考虑使用另一个生成类似数据包的程序,并且我们可以使用我的第一个(虽然天真)方法在ctor中使用UDP客户端绑定在同一台计算机上共享端口.抱歉,您必须取消标记您的答案,sysrqb.
我开始真的很喜欢C#的?运营商.而且我很习惯这样一个事实:在某些语言中有一些方便的东西,它最有可能也在Perl中.
但是,我找不到?? 相当于Perl.有没有?
使用反射时,可以使用System.Diagnostics.StackTrace获取调用堆栈(除了它可以是由JIT优化引起的粗略近似)并检查包含的StackFrame对象.
如何获取对堆栈帧中的方法正在执行的对象(this-pointer)的引用?
我知道我可以通过在堆栈框架对象上调用GetMethod()来获取MethodBase,但我正在寻找的东西是GetObject()(如果方法是静态的,它会自然地返回null).看起来堆栈帧对象只能查询静态确定的信息,例如方法信息,原始文件等.
VS调试器知道(虽然它可能使用另一种获取调用堆栈跟踪的方法),因为可以双击调用堆栈窗口中的任何堆栈帧并查看本地和类字段的值.
编辑:澄清:我想要调用该方法的对象实例.即:如果在调用堆栈的某个地方的对象实例A上调用方法Foo(),并且它级联到我执行堆栈跟踪的方法,我想从我执行堆栈跟踪的位置获取对A的引用.(不是方法库的声明类型)
我需要一些DLR帮助.我正在实现一个IDynamicMetaObjectProvider和DynamicMetaObject,但我遇到了一些问题,获得了预期的返回类型.我在metaobject中覆盖了BindInvokeMember,我可以看到所有的args类型但没有返回类型.有人知道如果可能的话我会怎么做?我知道返回类型是动态的,但是如果你调用的东西依赖于返回类型.除非我知道消费者期望的返回类型,否则我不知道要在DynamicMetaObject中执行哪个操作.
我不能在这里粘贴我的实际代码,因为它调用各种工作的东西.下面是一些示例动态对象代码.
public class TestDynamicMetaObject : DynamicMetaObject
{
public TestDynamicMetaObject(Expression expression, object value)
: base (expression, BindingRestrictions.Empty, value)
{
}
public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)
{
Delegate method = new Func<int>(Test);
return new DynamicMetaObject(
Expression.Call(method.Method),
BindingRestrictions.GetInstanceRestriction(Expression,Value),
Value
);
}
public static int Test()
{
return 10;
}
}
public class TestDynamicObject : IDynamicMetaObjectProvider
{
DynamicMetaObject IDynamicMetaObjectProvider.GetMetaObject(Expression parameter)
{
return new TestDynamicMetaObject(parameter, this);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的地方.
static void Main(string[] args)
{
try
{
dynamic x = new TestDynamicObject(); …Run Code Online (Sandbox Code Playgroud) 我主要是一个Flash AS3开发人员,但是我跳进了openframeworks并且在使用3D时遇到了麻烦(这些例子在AS中)
在2D中,您可以使用Math.Sin()和模拟围绕点旋转的对象Math.cos(),就像这样
function update(event:Event):void
{
dot.x = xCenter + Math.cos(angle*Math.PI/180) * range;
dot.y = yCenter + Math.sin(angle*Math.PI/180) * range;
angle+=speed;
}
Run Code Online (Sandbox Code Playgroud)
我想知道如果我想在第三维轨道运行,我将如何将其转换为3D轨道.
function update(event:Event):void
{
...
dot.z = zCenter + Math.sin(angle*Math.PI/180) * range;
// is this valid?
}
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助.
如何在运行时创建分部类?
示例:我有一个班级
public partial class A
{
}
Run Code Online (Sandbox Code Playgroud)
我想在运行时从XML文件创建我的A类的一部分.因为我在编码代码时没有编译我的项目.我知道这意义不大,但我需要这个.
XOML文件适合我吗?
c# ×5
c++ ×1
geometry ×1
localhost ×1
math ×1
perl ×1
port ×1
reflection ×1
stack-frame ×1
stack-trace ×1
udp ×1