Tag: 套接字

套接字服务器一直在监听

要求是服务器套接字应该始终接受客户端套接字连接(Windows服务应用程序)。 下面是几个小时可以正常工作的代码,但是在一段时间之后接受根本不起作用。 为了始终保持接受,我还有每隔10分钟连接服务器的线程。 通过这种方式我知道服务器套接字已经停止一段时间(几个小时) public void StartReceiveNotification() { if (!isStarted) { try { byte[] bytes = new Byte[1024]; var ips = Dns.GetHostAddresses(Dns.GetHostName()); var myAddress = ips.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork); assigningIp = myAddress; server = new TcpListener(myAddress, 11001); server.Start(); AcceptSockets(); isStarted = true; } catch (Exception ex) { logger.Error(ex); } } } private void AcceptSockets() […]

TCPClient有时会收到空字节数组

目前正在使用套接字开发一个简单的消息服务器,有时TCPClient接收正确的字节数,但每个字节为0。 这是发件人代码。 try { //c.clientSocket.NoDelay = true; // Send back an OK var clientStream = c.clientSocket.GetStream(); var Response = JsonConvert.SerializeObject(new Packet(“SERVER”, c.ClientName, new List() { new Payload(MessageLibrary.Commands.OK, null) })); var msg = System.Text.Encoding.ASCII.GetBytes(Response); clientStream.Write(msg, 0, msg.Length); } catch (Exception ex) { if (ExceptionRaised != null) ExceptionRaised(c.ClientName, ex); } Response = “{\”TimeStamp\”:\”2016-03-18T08:15:15.0881326+00:00\”,\”Sender\”:\”SERVER\”,\”Payload\”:[{\”Command\”:\”OK\”,\”CommandValue\”:\”\”}],\”Destination\”:\”GBCO0101\”}” 消息包含139个字节 所以这似乎没问题,这是接收代码。 static void […]

文件传输的进度条

大家好,祝大家好。 我正在为LAN创建文件传输,我想在该文件传输中放置一个进度条,以便用户可以看到传输的进度。 如何根据文件的大小和传输速率操作进度条? 示例:我将10mb文件发送到网络中的另一台计算机。 我希望进度显示剩余时间或完成传输所需的时间。 这里的任何人都可以给我一个关于该做什么的想法吗?

如何在Socket类中使用数据接收事件?

我写了一个简单的客户端,在dotnet中使用TcpClient进行通信。 为了等待来自服务器的数据消息,我使用一个在socket上使用阻塞Read()调用的Read()线程。 当我收到的东西,我必须生成各种事件。 这些事件发生在工作线程中,因此您无法直接从其更新UI。 Invoke()可以使用,但对于最终开发人员来说很困难,因为我的SDK可能会被完全不使用UI或使用Presentation Framework的用户使用。 演示框架有不同的处理方式。 在我们的测试应用程序上Invoke() ,因为Microstation Addin需要花费大量时间。 Microstation是单线程应用程序,并且其线程上的调用调用并不好,因为它总是忙于绘图和其他东西消息需要很长时间才能处理。 我希望我的事件在与UI相同的线程中生成,因此用户不必通过Dispatcher或Invoke 。 现在我想知道当数据到达时如何通过套接字通知我? 是否有一个内置的回调。 我喜欢winsock样式接收事件而不使用单独的读取线程。 我也不想使用窗口计时器来轮询数据。 我在IOControl()函数中找到了IOControlCode.AsyncIO标志 启用等待接收数据的通知。 该值等于Winsock 2 FIOASYNC常量。 我找不到任何关于如何使用它来获取通知的示例。 如果我在MFC / Winsock中是正确的,我们必须创建一个size(0,0)的窗口,该窗口仅用于监听数据接收事件或其他套接字事件。 但我不知道如何在dotnet应用程序中这样做。

在我的应用程序关闭后,端口仍然被收听,这是不好的Ju-ju?

我的应用程序在某个端口上侦听套接字消息。 我可以通过命令行中的“netstat -a”看到它是LISTENING。 当我关闭应用程序时,当我重新运行“netstat -a”时,机器仍在侦听该端口 这是一个问题吗? 似乎也许是这样,因为当我随后再次启动应用程序时,它会崩溃地崩溃。 我怎样才能使听力停止? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; using System.Diagnostics; namespace testSocketSendAndReceive_Nutshell { public partial class Form1 : Form { string sJerrysIPAddr = “10.24.93.110”; string sMyIPAddr = “10.24.93.128”; string sThisAppFileName = […]

套接字编程

好吧,我已经绞尽脑汁,无法找到解决方案。 这里的问题是我能够调用begin-receive一次,但之后我无法找到一种适当的技术,可以一次又一次地调用该方法。 因此,虽然正在建立连接,但消息可以只接收一次,之后不再接收..请帮助,因为它非常紧急。谢谢你。 我在这里放下整个代码。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Runtime.InteropServices; using System.IO; using.System.Threading; namespace WindowsApplication1 { public partial class lanmessenger : Form { Socket client; Socket newSock, server, hostSock, remote; byte[] receiveBuffer = new byte[1024]; byte[] sendBuffer = new byte[1024]; String […]

在c#中使用套接字编程接收消息不起作用

我正在尝试使用套接字编程编写程序。 该程序只是从客户端向服务器发送消息。 客户端代码是这样的: class Program { static void Main(string[] args) { TcpClient client = new TcpClient(); IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(“127.0.0.1”), 3000); client.Connect(serverEndPoint); NetworkStream clientStream = client.GetStream(); ASCIIEncoding encoder = new ASCIIEncoding(); byte[] buffer = encoder.GetBytes(“Hello Server!”); clientStream.Write(buffer, 0, buffer.Length); clientStream.Flush(); } } 您可以看到客户端只是向服务器发送Hello服务器。 服务器代码是这样的: class Server { private TcpListener tcpListener; private Thread listenThread; public […]

连接到SFTP服务器的SocketException:name有效,但未找到所请求类型的数据

我正在尝试使用SharpSsh库连接我的sftp服务器,但我收到以下错误: System.Net.Sockets.SocketException (0x80004005): The requested name is valid, but no data of the requested type was found 我正在使用以下代码进行连接 Tamir.SharpSsh.Sftp sftp = new Tamir.SharpSsh.Sftp(“ftp.simptr.us”, “username”, “password”); 为什么抛出这个exception?

在C#中在同一个套接字上发送+接收数据

我正在尝试使用套接字(System.Net.Socket,甚至尝试过TcpListener / Client / Etc。)来监听数据,而它正在等待或已经在发送数据。 我做了以下事情: public byte[] bytesIn; public byte[] bytesOut; public Socket transmitter; public Socket receiver; public Comlink(String ipAddress, int portNum) { try { IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), 11000); transmitter = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); transmitter.Listen(10); receiver = transmitter.Accept(); receiver.Receive(bytesIn); try { transmitter.Connect(remoteEP); this.bytesOut = Encoding.ASCII.GetBytes(“”); int bytesSent = transmitter.Send(this.bytesOut); this.connected = […]

TcpClient未连接到远程服务器

我正在尝试使用TcpClient类连接到远程计算机,但它仍然失败: System.dll中出现未处理的“System.Net.Sockets.SocketException”类型exception 附加信息:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应 在客户端和服务器本地工作时测试代码,但是当我尝试连接到远程计算机时,它不再起作用。 这是服务器代码: using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace WebSocketServer { class Program { static void Main(string[] args) { Console.WriteLine(“Starting a new WebSockets server.”); WebSocketServer server = new WebSocketServer(); Console.WriteLine(“The WebSocket server has started.”); bool userRequestedShutdown […]