Tag: 套接字

TcpClient.Connected返回true但客户端未连接,我可以使用什么?

在VB.net中,我使用TcpClient来检索数据字符串。 我一直在检查.Connected属性以validation客户端是否已连接,但即使客户端断开连接,它仍然返回true。 我可以使用什么作为解决方法? 这是我当前代码的精简版: Dim client as TcpClient = Nothing client = listener.AcceptTcpClient do while client.connected = true dim stream as networkStream = client.GetStream() dim bytes(1024) as byte dim numCharRead as integer = stream.Read(bytes,0,bytes.length) dim strRead as string = System.Text.Encoding.ASCII.GetString(bytes,0,i) loop 我想,如果客户端断开连接,至少GetStream()调用会抛出一个exception,但是我已经关闭了另一个应用程序但它仍然没有… 谢谢。 编辑轮询客户端。建议使用但不能解决问题。 如果客户端没有’acutally’连接可用,则返回0。 关键是我试图让连接保持打开状态,并允许我通过同一个套接字连接多次接收数据。

InvalidOperationException:撤消操作遇到的上下文与相应的Set操作中应用的上下文不同

我得到以下exception: Exception Type: System.InvalidOperationException Exception Message: The Undo operation encountered a context that is different from what was applied in the corresponding Set operation. The possible cause is that a context was Set on the thread and not reverted(undone). Exception Stack: at System.Threading.SynchronizationContextSwitcher.Undo() at System.Threading.ExecutionContextSwitcher.Undo() at System.Threading.ExecutionContext.runFinallyCode(Object userData, Boolean exceptionThrown) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteBackoutCodeHelper(Object backoutCode, Object userData, […]

在XP上使用Multicast的C#SocketException

以下C#代码在Vista上正常工作,但在XP上失败: SocketException:提供了无效的参数。 ErrorCode是10022。 XP上的防火墙已被禁用。 using System; using System.Net; using System.Net.Sockets; public class SocketTest { [STAThread] public static void Main() { MySocket s = new MySocket(); Console.WriteLine(“done”); Console.ReadLine(); } public class MySocket : Socket { public const ushort SocketTtl = 4; public const string Address = “239.255.255.250”; public IPAddress IPAddress = IPAddress.Parse(Address); public MySocket() : base(AddressFamily.InterNetwork, […]

在C#中实现套接字侦听器的最佳方法

我已经找到了答案,但找不到类似的东西…… 我是C#的新手。 我需要使用WinForms在C#中创建一个程序。 它基本上有两个组件:UI然后我需要有一个永久侦听套接字TCP端口的进程。 如果有任何收到的东西,那么我需要提出一个事件或类似的东西,以便我可以更新UI。 问题:在程序运行时,实现需要一直监听的进程的最佳方法是什么? 然后,当我收到消息时,如何通知UI它需要更新? 谢谢!

我应该使用while(true)从Socket接收数据吗?

请参阅我之前的问题以获取代码示例套接字:有时(很少)数据包在接收期间丢失 我需要始终从UDP多播套接字接收数据。 这是单向通信我只需要监听新数据并尽快处理它。 我应该使用while(true)吗? 我不喜欢while(true)因为在我看来,这为处理器带来了很多额外的工作。 可能c#提供其他回拨技术或其他什么?

C#套接字与管道

目前我正在开发Windows上的多进程桌面应用程序。 此应用程序将是一个收缩包装的应用程序,它将部署在世界各地的客户端计算机上。 虽然我们可以对机器有广泛的规格 – 例如带有.Net 4.0 CF的Windows XP SP3,但我们无法控制它们,我们无法对其配置过于具体 – 例如我们无法指定机器必须具有cuda 1.4图形处理器等等 其中一些进程是托管的(.Net 4.0),其他进程是非托管的(C ++ Win32)。 这些流程需要共享数据。 我迄今评估的选项是 Tcp套接字 命名管道 管道看起来好一点,但是对于我们的需求 – 两者的性能都是可以接受的。 套接字为我们提供了跨越机器(和操作系统 – 我们最终支持非Microsoft操作系统)边界的灵活性,因此我们倾向于使用套接字。 但是 – 我主要担心的是 – 如果我们使用Tcp套接字 – 我们是否可能遇到防火墙问题? 是否有其他人部署了使用TCP进行IPC和经历过问题的桌面应用程序/程序? 如果是这样 – 什么样的? 我知道这是一个相当开放的问题,我很乐意改写。 但我真的想知道我们可能会遇到什么样的潜在问题。 编辑:为了更轻松 – 我们只运送一些POD,整数,浮点数和字符串。 我们构建了一个抽象层,提供了两种范例 – 请求/响应和订阅。 传输层已被抽象出来,目前我们有两个实现 – 基于管道和基于TCP。

是否可以在Socket和TcpClient对象之间进行转换?

这是另一个C#/。NET问题仅基于好奇而不仅仅是一个迫切需要 …… 如果你有一个Socket实例并且你想将它包装在更高级别的TcpClient类中,那可能吗?你会怎么做? 相反,如果你有一个TcpClient实例,是否有可能得到底层的Socket ?

异步写入套接字线程是否安全?

考虑Socket.BeginSend()方法。 如果两个线程池线程同时调用此方法,它们各自的消息是否最终会相互混合,或者套接字类是否阻止这种情况发生?

C#UDP广播客户端/服务器不起作用

我正在使用.NET 2.0,并创建了一个相当简单的udp广播应用程序和UDP侦听器。 听众代码: Socket listener = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp ); IPEndPoint localEndPoint = new IPEndPoint( IPAddress.Any, 11000 ); listener.Bind( localEndPoint ); EndPoint ep = (EndPoint)localEndPoint; Console.WriteLine(“Ready to receive…”); byte[] data = new byte[1024]; int recv = listener.ReceiveFrom(data, ref ep); string stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(“received: {0} from: {1}”, stringData, ep.ToString()); listener.Close(); 服务器代码: […]

套接字接受多个客户端,但我无法打开该文件

基本上我已经编写了这个程序来检查字符串。 我已经使用套接字方法了。 问题是,我无法弄清楚如何以及在何处准确地打开此程序中​​的文件并搜索字符串。 我希望客户端能够键入/搜索他们想要的任何字符串,而不是在程序中提供搜索字符串。 当我运行程序时,我需要在客户端的屏幕上输出。 我该如何改进这个程序? 有人可以帮我解决一下代码吗? 这是我的计划: class Program { static void Main(string[] args) { TcpListener serversocket = new TcpListener(8888); TcpClient clientsocket = default(TcpClient); serversocket.Start(); Console.WriteLine(“>> Server Started”); while (true) { clientsocket = serversocket.AcceptTcpClient(); Console.WriteLine(“Accept Connection From Client”); LineMatcher lm = new LineMatcher(clientsocket); Thread thread = new Thread(new ThreadStart(lm.Run)); thread.Start(); Console.WriteLine(“Client connected”); } Console.WriteLine(” […]