Tag: 套接字

如何查找原因和SocketException,并显示已建立的连接被主机中的软件中止的消息?

我知道类似的问题可能已被多次询问,但我想表达我所看到的行为,并发现是否有人可以帮助预测其原因。 我正在写一个通过TCP连接到其他Windows服务的Windows服务。 这有100个用户实体,每个有5个连接。 这些用户使用各自的连接执行任务。 该应用程序继续看这个问题1或2天。 或者有时在启动后立即显示问题(-rarely)。 我最好的跑步是4到5天没有显示这个例外。 在那个申请去世后,我不得不因各种原因停止申请。 我想知道是什么原因引起的? 这是堆栈跟踪。 System.IO.IOException: Unable to write data to the transport connection: An established connection was aborted by the software in your host machine. —> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at […]

如何通过c#中的socket发送文件

我有服务器和客户端控制台应用程序,可以很好地进行通信以及发送一些字符 这是代码…… 服务器 public static void Main() { try { IPAddress ipAd = IPAddress.Parse(“127.0.0.1”); /* Initializes the Listener */ TcpListener myList = new TcpListener(ipAd, 1234); /* Start Listeneting at the specified port */ myList.Start(); Console.WriteLine(“The server is running at port 8001…”); Console.WriteLine(“The local End point is :” + myList.LocalEndpoint); Console.WriteLine(“Waiting for a connection…..”); Socket s […]

关于将EndPoint传递给Socket.ReceiveFrom()的不确定性

如果我做这样的事情: byte[] buffer = new byte[1024]; Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint remote = new IPEndPoint(IPAddress.Parse(“12.34.56.78”), 1337); sock.ReceiveFrom(buffer, ref remote); ReceiveFrom方法是否只接收来自正在传递的端点的数据包? 文档说明如下: 使用无连接协议,ReceiveFrom将读取接收到本地网络缓冲区的第一个入队数据报。 这是否意味着传递的EndPoint仅用于存储数据包来自的主机的EndPoint,并且根本不影响ReceiveFrom方法的行为? 如果是这样,为什么需要将其作为“ref”而不是“out”传递?

使用.net监控传入/传出的http流量

我想编写一个小应用程序,它可以:1。监视通过Web浏览器请求的URL和/或2.监视本地计算机上的传入http响应 我一直在做一些谷歌搜索,但我没有找到任何明确的答案。 我想也许是System.Net.Sockets.TCPListener并且搞乱它,但我的印象是它不是我正在寻找或不能处理这两件事。 我不需要详细的逐步解释。 只是一个小概述将是有帮助的(如果这是可能的),例如(使用什么类,要订阅什么事件,实例化必要对象所需的任何其他细节)我可以谷歌细节。

尝试连接到TCP套接字时出现无效的指针地址错误

我有以下.NET代码。 其中大部分都是在我被录用之前写的,而且最初的开发者都没有为我们工作。 private void SendTCPMessage(string IpAddress, string Message) { … //original code that fails because the Host entry produced //has no elements in AddressList. //IPHostEntry remoteMachineInfo = Dns.GetHostEntry(IpAddress); //New code that fails when connecting IPHostEntry remoteMachineInfo; try { remoteMachineInfo = Dns.GetHostEntry(IpAddress); if (remoteMachineInfo.AddressList.Length == 0) remoteMachineInfo.AddressList = new[] { new IPAddress( //Parse the string into […]

使用TCP时,是否需要使用校验和来保护我的消息?

使用TCP作为网络协议,在通过网络发送消息之前,我将每个消息的大小(以及可能的校验和?)加上前缀。 我想知道,计算和传输消息的校验和是否有意义,以确保消息将被传送(如果和何时传送)不变,例如由于某些网络错误。 目前我在发送消息之前发送消息的4字节大小+ 2字节校验和(CRC-16)。 另一个端点正确识别预期的消息长度,读取它并validation校验和。 我知道TCP有内部数据包validation机制,我有一种强烈的感觉,我在应用程序级别的消息validation是多余的,但我不确定,在做出决定之前需要你的建议。 我正在开发客户端 – 服务器应用程序,每天有数万个与服务器的潜在连接。 即使任何消息中的单个损坏字节也可能导致交换不正确消息的整个链,这是不可接受的(好吧,几乎所有客户端 – 服务器应用程序都有相同的要求,不是它们)。 所以我想确定 – 我能安全地信任TCP的内部可靠性,还是提供自己的校验和validation机制更好。 我说的是小的,两个字节的校验和(CRC-16),我不是在谈论数字签名消息等等(并且系统是使用套接字在.Net(C#)中开发的,如果这有任何区别的话) 。

服务器套接字挂起在Close_Wait中

方案如下: 我从我的C#服务器应用程序向客户端发送大量数据。 突然数据流停止,客户端没有数据更新,端口被阻止。 发生这种情况时,服务器端的症状是 Close_Wait在该端口(netstat) 操作将阻止(错误代码:135)在日志中。 无法从客户端建立新连接。 Telnet失败到该端口 目前,我们会在出现问题时重新启动服务器。 显然这不是一个解决方案。 有人能为Windows Server 2008中的Close_Wait中的服务器套接字提供解决方案吗? 对此场景的任何建议都将不胜感激。 提前致谢。

来自UI线程中的Async组件的Fire事件

我正在.Net 2.0中构建一个非可视组件。 该组件使用异步套接字(BeginReceive,EndReceive等)。 异步回调在运行时创建的工作线程的上下文中调用。 组件用户不必担心multithreading(这是主要目标,我想要的) 组件用户可以在任何线程中创建我的非可视组件(UI线程只是简单应用程序的通用线程。更严重的应用程序可以在任意工作线程中创建组件)。 组件触发事件,例如“SessionConnected”或“DataAvailable”。 问题:由于Async Callbacks和其中引发的事件,事件处理程序在工作线程上下文中执行。 我想使用一个中间层,它强制事件处理程序在首先创建组件的线程的上下文中执行。 示例代码(从exception处理等中删除…) /// /// Occurs when the connection is ended /// /// The IAsyncResult to read the information from private void EndConnect(IAsyncResult ar) { // pass connection status with event this.Socket.EndConnect(ar); this.Stream = new NetworkStream(this.Socket); // — FIRE CONNECTED EVENT HERE — // Setup Receive Callback […]

(显然)正常关闭UDPClient使套接字被阻止

以下代码尽管显然关闭了UDP套接字,但仍然挂起并且无法重新连接到同一地址/端口。 这些是我使用的类变量: Thread t_listener; List XSensAvailablePorts; private volatile bool stopT_listener = false; volatile UdpClient listener; IPEndPoint groupEP; 我用一个处理Socket连接和监听的方法创建并启动一个新线程: private void startSocketButton_Click(object sender, RoutedEventArgs e) { stopT_listener = false; closeSocketButton.IsEnabled = true; startSocketButton.IsEnabled = false; t_listener = new Thread(UDPListener); t_listener.Name = “UDPListenerThread”; t_listener.Start(); } 方法如下(我在Receive上使用超时,以便在套接字上没有发送任何内容并且发出Stop不会Stop它): private void UDPListener() { int numberOfPorts = XSensAvailablePorts.Count(); int currAttempt = […]

AcceptSocket不尊重Thread.Abort请求

我的理解是Thread.Abort应该在被阻塞的线程上引发ThreadAbortException,但是在处理TcpListener.AcceptSocket时似乎不是这种情况。 以下是该问题的最基本说明: class Program { static void Main(string[] args) { Thread thread = new Thread(Listen); thread.Start(); Thread.Sleep(1000); // give it a second to get going Console.WriteLine(“Aborting listener thread”); thread.Abort(); thread.Join(); Console.WriteLine(“Listener thread finished press to end app.”); Console.ReadLine(); } static void Listen() { try { Console.WriteLine(“Starting to listen”); TcpListener listener = new TcpListener(IPAddress.Any, 4070); listener.Start(); […]