Tag: 网络

Ping.SendAsync()从0.0.0.0返回重播,如何获取ping地址?

我在C#中遇到Ping.SendAsync()函数的问题。 我ping一些ip地址,但有些错误。 我需要从列表中删除错误的地址。 但是如何,因为p_PingCompleted 事件args.replay.adress是0.0.0.0 ? 这是我的代码: System.Collections.Generic.List GameList = new System.Collections.Generic.List(); System.Timers.Timer timer = new System.Timers.Timer(5000); public StartServer() { this.tcpListener = new TcpListener(IPAddress.Any, 8888); this.listenThread = new Thread(new ThreadStart(ListenForClients)); this.listenThread.Start(); Console.WriteLine(“Master server running…”); timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); timer.Start(); } void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { Game[] games = GameList.ToArray(); foreach (Game curgame in games) […]

套接字只捕获传出的数据包,而不是传入的数据包

我已经在这个(经常被引用的)示例项目中使用了数据包嗅探器。 实现HTTP数据包后,我注意到我收到的唯一HTTP数据包是请求,我没有收到任何响应。 我看了很多不同的来源,但由于使用的代码经常是相同的,我倾向于认为它可能是我自己的本地。 当我查看我的日志时,我看到每个数据包都有我的本地IP作为SourceIP ,既用于HTTP数据包,也用于到达其他端口的数据包。 我在这里提供了一个工作示例,您可以将其复制粘贴到LINQPad中并展示问题(添加System.Net和System.Net.Socket程序集)。 不要忘记以管理员身份执行LINQPad以访问套接字。 这导致192.168.0范围内有数百/数千个条目,总共3个IP地址exception引用我的托管提供商(使用nslookup检查)。 private readonly byte[] _data = new byte[4096]; private Socket _mainSocket; public void Capture() { _mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); _mainSocket.Bind(new IPEndPoint(GetLocalIP(), 0)); var byTrue = new byte[] {1, 0, 0, 0}; var byOut = new byte[] {1, 0, 0, 0}; _mainSocket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut); _mainSocket.EnableBroadcast = true; […]

阻止允许禁止用户访问共享文件夹的WNetAddConnection2类

我开发了C#windows应用程序。 操作系统是Windows 7 要求:使用带有凭据的代码使用WNetAddConnection2类访问网络共享文件夹“测试”。 限制:某些用户可以访问此共享文件夹“Test”,但对于其他用户,则设置“拒绝”共享权限。 在代码WNetAddConnection2validation错误的用户名/密码,它会给我错误。 例如 来自局域网的“用户A”尝试使用run command访问共享文件夹“测试”,他无法访问“访问被拒绝”,因为他没有权限。 但问题是WNetAddConnection2类允许’用户A’成功建立网络连接。 感染“WNetAddConnection2允许来自域的所有用户”。 类正在validation访问权限。 代码是 private void btnValidate_Click(object sender, EventArgs e) { bool valid = false; try { NetworkCredential NC = new NetworkCredential(txtUserName.Text.Trim(), txtPassword.Text.Trim()); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } public class NetworkConnection : IDisposable { string _networkName; uint dwFlags; public NetworkConnection(string networkName, NetworkCredential credentials) […]

对象到网络序列化 – 使用现有协议

我正在为用C ++编写的服务器程序编写客户端。 同样罕见的是,所有网络协议都采用这样一种格式,即数据包可以很容易地进出C ++结构(1字节数据包代码,然后是每种数据包类型的不同安排)。 我可以在C#中做同样的事情,但是有一种更简单的方法,特别是考虑到很多数据是固定长度的char数组,我想用它作为字符串来玩吗? 或者我应该根据需要吮吸它并转换类型? 我已经看过使用ISerializable接口,但它看起来并不像所需的低级别。

RouteData.Values保持为空

我的路线代码如下: RouteTable.Routes.MapPageRoute(“IDP”, “Person/{IDP}”, “~/Person.aspx”) 现在我想获取表单上的数据,通常它的工作原理如下: int id = Convert.ToInt32(Page.RouteData.Values[“IDP”]); 但每次我试图从路线获取数据,例如: http://PC-81/SkillDatenbank/Person/1我没有从值中获取数据(它是空的!) 我正在使用ASP.Net 4.5与Web窗体。 编辑:我做了一个新项目并进行了测试,它没有工作要么我做错了什么? 在上一个项目中它确实像这样工作:(你能帮帮我吗?

7zip压缩网络流

我想在通过网络发送之前压缩文件。 我认为最好的方法是7zip,因为它是免费和开源的。 我如何使用7zip与.net? 我知道7zip是免费的,并且他们在c#中有源代码但由于某种原因它在c#上非常慢,所以我宁愿调用因性能原因安装7zip时出现的dll 7z.dll 。 所以我能够在7z.dll中编组和调用方法的7z.dll是在名为sevenzipsharp的库的帮助下。 例如,将dll添加到我的项目中将使我能够: // if you installed 7zip 64bit version then make sure you change plataform target // like on the picture I showed above! SevenZip.SevenZipCompressor.SetLibraryPath(@”C:\Program Files\7-Zip\7z.dll”); var stream = System.IO.File.OpenRead(@”SomeFileToCompress.txt”); var outputStream = System.IO.File.Create(“Output.7z”); SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor(); compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2; compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra; compressor.CompressStream(stream, outputStream); 这就是我在c#中使用7zip的方式。 现在我的问题是: […]

序列化字节数组与XML文件

我大量使用字节数组来传输对象,原始数据,通过网络和返回。 我通过一个类型实现ISerializable来适应java的方法,它包含两个方法,作为接口的一部分,ReadObjectData和WriteObjectData。 任何使用此接口的类都会将日期写入字节数组。 像那样的东西 class SerializationType:ISerializable { void ReadObjectData (/*Type that manages the write/reads into the byte array*/){} void WriteObjectData(/*Type that manages the write/reads into the byte array*/){} } 写完所有对象后,我发送一个网络数组。 这实际上是双重问题。 它是通过网络以最高效率(速度,大小)发送数据的正确方法吗? 您是否会使用此方法将对象写入文件,而不是通常使用xml序列化? 编辑#1 Joel Coehoorn提到了BinaryFormatter。 我从未使用过这门课。 除了我目前在msdn上看到的内容之外,你会详细说明,提供好的例子,参考资料,建议,当前的做法吗?

控制发送哪个网卡TCP / IP消息

我目前正在研究的系统包括一台运行XP的控制器PC,其中.Net 2连接到一组嵌入式系统。 所有这些组件都通过以太网网络相互通信。 我目前正在XP计算机上使用TcpClient.Connect打开与嵌入式系统的连接以发送TCP / IP消息。 我现在必须将XP计算机连接到外部网络以发送处理数据,因此XP计算机上现在有两个网卡。 但是,发送到外部网络的消息不得出现在将嵌入式系统连接在一起的网络上(不想占用带宽),并且到嵌入式系统的消息不得出现在外部网络上。 因此,我所做的断言是,当使用TcpClient.Connect方法时,发送到定义的IP地址的消息将在两个网卡上发送出去。 如何指定通过.Net网络API发送哪些物理网卡消息。 如果.Net中不存在这样的方法,那么我总是可以P / Invoke Win32 API。 Skizz

clientStream.Read返回错误的字节数

此代码有效: TcpClient tcpClient = (TcpClient)client; NetworkStream clientStream = tcpClient.GetStream(); byte[] message = new byte[5242880]; int bytesRead; bytesRead = clientStream.Read(message, 0, 909699); 但是这会返回错误的字节数: bytesRead = clientStream.Read(message, 0, 5242880); 为什么? 我该如何解决? (实际数据大小为1475186;代码返回11043作为字节数)

如何在c#中通过本地网络进行UDP组播?

我试图在我的本地网络上进行一些简单的UDP通信。 我想要做的就是对网络上的所有机器进行多播 这是我的发送代码 public void SendMessage(string message) { var data = Encoding.Default.GetBytes(message); using (var udpClient = new UdpClient(AddressFamily.InterNetwork)) { var address = IPAddress.Parse(“224.100.0.1”); var ipEndPoint = new IPEndPoint(address, 8088); udpClient.JoinMulticastGroup(address); udpClient.Send(data, data.Length, ipEndPoint); udpClient.Close(); } } 这是我的接收代码 public void Start() { udpClient = new UdpClient(8088); udpClient.JoinMulticastGroup(IPAddress.Parse(“224.100.0.1”), 50); receiveThread = new Thread(Receive); receiveThread.Start(); } public void […]