Tag: 网络

如何判断基于套接字的客户端连接是否已断开?

如果我的客户端连接在另一end( kill -9 server)断开end( kill -9 server) 。 客户端需要几分钟才能确定出现问题。 即使连接实际上已断开, Socket.Connected返回true。 一旦另一端断开链接,确定连接不存在的最快方法是什么? 客户代码: try{ Socket socket= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); /*Assume there is a connection on the other end*/ while (socket.Connected) { /*Do some processing*/ } }catch (SocketException se){ Console.WriteLine(ex.Message); } catch (Exception ex){ Console.WriteLine(ex.Message); } finally { Console.WriteLine(“something bad happen”); }

异步TCP服务器 – 消息框架建议

我在C#中有一个异步TCP套接字服务器,我使用Tocket的TcpListener / TcpClient包装器。 我对网络一般都很陌生,所以我不知道TCP如何处理发送的数据,以及它如何不保留消息边界。 经过一番研究后,我想我已经提出了一个可靠的解决方案,但我想知道是否有人对我有更多建议。 目前,我发送的数据是使用protobuf(Google的数据交换库)的序列化类对象的byte [] https://code.google.com/p/protobuf/ 在我序列化数据之后,在它发送之前,我决定在字节数组的开头附加一个4字节的Int32。 我的想法是,当数据包被发送到服务器时,它将解析出Int32,然后等到它接收到该数量的字节数,然后再对数据做任何事情,否则再次调用BeginRead。 这是我编写数据之前运行的代码,它似乎工作正常,但我对任何性能建议持开放态度: public byte[] PackByteArrayForSending(byte[] data) { // [0-3] Packet Length // [3-*] original data // Get Int32 of the packet length byte[] packetLength = BitConverter.GetBytes(data.Length); // Allocate a new byte[] destination array the size of the original data length plus the packet length array size […]

C#3.5 – 通过网络连接命名管道

在网络中通过C#设置命名管道的正确方法是什么? 目前我有两台机器,’客户’和’服务器’。 服务器以下列方式设置其管道: NamedPipeServerStream pipeServer = new NamedPipeServerStream( “pipe”, PipeDirection.InOut, 10, PipeTransmissionMode.Byte, PipeOptions.None) pipeServer.WaitForConnection(); //… Read some data from the pipe 客户端以下列方式设置其连接: NamedPipeClientStream pipeClient = new NamedPipeClientStream( “server”, “pipe”, PipeDirection.InOut); pipeClient.Connect(); //This line throws an exception //… Write some data to the pipe 可以通过转到“\\ server”在网络上访问“服务器”计算机。 每当我运行程序时,我都会收到一个System.UnauthorizedAccessException,其中显示“拒绝访问路径”。 当我在本地计算机上运行服务器和客户端并尝试连接到“。”时,代码工作正常。 与客户。

获取没有DNS的网络上所有计算机的列表

问候, 我需要一种方法(通过C#或.bat文件)来获取给定网络上所有计算机的列表。 通常情况下,我使用“网络视图”,但这往往只在您的域内起作用(根据我的理解)。 我需要网络上所有可用计算机的名称(或至少IP地址)。 能够获得不属于我的域的所有计算机(在这种情况下我将使用WORKGROUP,或任何默认值)也可以。

如何从BinaryReader简化网络字节顺序转换?

System.IO.BinaryReader以little-endian格式读取值。 我有一个C#应用程序连接到服务器端的专有网络库。 正如人们所期望的那样,服务器端以网络字节顺序发送所有内容,但我发现在客户端处理此问题很尴尬,特别是对于无符号值。 UInt32 length = (UInt32)IPAddress.NetworkToHostOrder(reader.ReadInt32()); 是我想出的唯一方法是从流中获取正确的无符号值,但这似乎既尴尬又丑陋,我还没有测试是否只会削减高阶值以便我有做BitConverter的乐趣。 有没有什么方法可以避免在整个过程中编写一个包装器以避免每次读取时出现这些丑陋的转换? 似乎读者应该有一个endian-ness选项来使这样的事情变得更简单,但我没有遇到任何问题。

C#检查Internet连接

你有没有办法告诉我,当我的C#程序运行时,是否有办法检查我的电脑中是否有互联网连接。 举一个简单的例子,如果互联网正在运行,我会输出一个消息框,说明Internet is available 。 否则我会输出一条消息说, Internet is unavailable 。 不使用库函数来查看网络是否可用(因为这不检查互联网连接) System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 或者没有打开网页并查看它是否返回数据 using (WebClient client = new WebClient()) htmlCode = client.DownloadString(“http://google.com”); 因为上述两种方法都不适合我的需要。

检索进程网络使用情况

如何获取进程发送/接收字节? 首选方法是使用C#。 我搜索了很多,但我没有找到任何简单的解决方案。 一些解决方案建议在机器上安装WinPCap并使用此lib。 喜欢这个人问: 在托管代码中需要“具有网络活动的进程”function – 就像resmon.exe一样,我不想要lib的开销。 有一个简单的解决方案吗? 实际上我想要Windows资源监视器在“带网络活动的进程”选项卡下提供的确切数据: Windows的资源监视器如何获取此信息? 任何例子? 此外,尝试使用此处提到的计数器方法: 发送/接收的网络丢失但没有成功 – 因为并非每个进程都显示在此计数器下。 我再次想知道资源监视器如何在不使用此计数器的情况下获取此信息…

从C#获取无线接入点的BSSID(MAC地址)

如何使用C#获取我的系统连接到的无线接入点的BSSID / MAC(媒体访问控制)地址? 请注意,我对WAP的BSSID感兴趣。 这与WAP的网络部分的MAC地址不同。

从我的网络位置获取计算机名称

我想知道是否有办法使用C#获取显示在我的网络位置的所有计算机名称。

在C#中管理无线网络连接

我们有一个用C#编写的WinForms应用程序,它有一个非常自定义的GUI。 不允许用户运行任何其他应用程序,用户根本无法进入操作系统(WinXP Pro)。 我们计划允许用户连接到可用的无线网络。 我们将不得不创建一个显示可用网络的配置屏幕(通过SSID)并允许用户连接。 连接时我们想要显示信号强度。 是否有任何现有组件提供此function? 除了这个,我什么都没找到。 我可以使用WMI设置TCP / IP设置,但这是我需要指导的无线内容。 非常感谢! 马特