Tag: sockets

从UDP连接获取客户端IP C#

我目前有一个服务器应用程序正在侦听UDP数据包的端口。 当一个发送到服务器时,它会正确接收并处理它。 有什么方法可以获取数据包来自哪里的IP地址? 这是我创建套接字的方法 this.UDPListener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, Port); this.UDPListener.Bind(endPoint); SocketAsyncEventArgs socketEventArgs = new SocketAsyncEventArgs(); socketEventArgs.SetBuffer(this.ReceiveBuffer, 0, this.ReceiveBuffer.Length); socketEventArgs.Completed += new EventHandler(OnReceive); if (!this.UDPListener.ReceiveAsync(socketEventArgs)) ThreadPool.QueueUserWorkItem(new WaitCallback((Object o) => this.OnReceive(this, socketEventArgs))); 当调用OnReceive时,没有任何内容包含消息来自的ip。 我已经查看了SocketAsyncEventArgs,我看到的只是监听ip。 编辑: 这就是我最终做的事情。 this.UDPListener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); this.UDPListener.Bind(new IPEndPoint(IPAddress.Any, Port)); EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, […]

偶尔以错误的顺序接收TCP数据并且不完整

我用Java创建了TCP Server应用程序,用C#创建了一个客户端应用程序。 当我发送数据时,客户端有时会无序地接收数据,有时会完全丢失部分。 基本上,我在服务器(java)中使用的代码看起来像这样(剥离): ServerSocket welcomeSocket = new ServerSocket(port); Socket connectionSocket = welcomeSocket.accept(); outputStream = new DataOutputStream(socket.getOutputStream()); //Create stream outputStream.writeBytes(message + “\n”); outputStream.flush(); 我使用“\ n”作为分隔符。 在客户端(C#)我使用以下代码: private const char Delimiter = ‘\n’; tcpclnt = new TcpClient(); tcpclnt.NoDelay = true; tcpclnt.Client.DontFragment = true; tcpclnt.Connect(ip, port); //This function is executed in a separate thread public void Receive() […]

偶发TCP连接失败(WSAEHOSTUNREACH)

在本地千兆网络上,我有一个使用单个TCP服务器和许多客户端的应用程序。 每个客户端每30秒ping一次服务器,打开TCP连接,发送状态消息,然后关闭。 使用SocketAsyncEventArgs设置服务器的方式与此处显示的示例非常相似(为简洁起见,省略) 客户端使用TcpClient启动连接。 客户代码的相关部分: using (TcpClient client = new TcpClient()) { IAsyncResult ar = client.BeginConnect(address, port, null, null); if (!ar.AsyncWaitHandle.WaitOne(timeout)) { throw new ApplicationException(“Timed out waiting for connection to ” + address); } client.EndConnect(ar); //exception thrown 5%-10% of the time //…send message and receive response… } 一切正常,除了在某些机器上,在EndConnect上只有5%-10%的时间抛出exception。 例外是WSAEHOSTUNREACH (10065): System.Net.Sockets.SocketException (0x80004005): A socket operation […]

带有SslStream的XmlTextReader – 从流中读取多个xml

我有一个SslStream,我从中收到自发的XML消息。 我想使用XmlTextReader处理来自该流的XML消息。 不幸的是,它允许我只读取第一个XML。 当我收到第一个xml后调用Read时,该方法抛出exception:XML文档中的多个根(“Xml_MultipleRoots”)。 我相信这是一个问题,流一个接一个地提供xml消息,但XmlTextReader只能处理一个。 如何解决这个问题?

犀牛嘲笑:如何建立假套接字?

我尝试使用以下代码构建一个假套接字进行测试: var socket = MockRepository.GenerateStub( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP ); socket.Stub(v => v.RemoteEndPoint).PropertyBehavior().Return( new IPEndPoint(IPAddress.Parse(“127.0.0.1”), 12345) ); 但是,为只读属性创建存根的尝试给出了以下exception: 呼叫无效,最后一次呼叫已被使用或未进行任何呼叫(确保您正在调用虚拟(C#)/可覆盖(VB)方法)。 任何人都可以帮助我找出它出错的地方吗? 谢谢

如何使用GC.KeepAlive()以及用于什么目的?

如何使用GC.KeepAlive()以及用于什么目的? 我使用Socket将文件从终端(Windows-CE)传输到服务器。 需要传输的时间是8分钟。在Windows-CE关闭后5分钟(如果没有按下触摸屏) 如果我GC.KeepAlive()使用GC.KeepAlive() ,这是我的问题吗?

使用dispose / finalize模式释放套接字/事件/ ummaged代码的正确技术

当我的类包含套接字和事件时,如何实现Dispose模式? 应该是这样的吗? class MyClass { Socket m_ListenerSocket = new Socket(); book m_Disposed=false; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool isDisposing) { if (!m_Disposed) { if (isDisposing) { if (m_ListenerSocket != null) { m_ListenerSocket.Dispose(); innerClass.Notify -= Notify; } } //finalized unmanged code here m_Disposed = true; } } ~MyClass() { Dispose(false); } } […]

如何“刷新”TCP客户端缓冲区?

我从几个示例中提取了一个连接到服务器的全双工C#TCP客户端。 基本概念是客户端和服务器都发送/接收消息(命令和事件)。 因此,我开发了一个FullDuplexSocket类,它公开了一个Send方法来向服务器发送消息,以及一个事件处理程序来接收来自服务器的消息。 一切正常,除了我似乎无法刷新从服务器收到的消息的缓冲区。 每次服务器发送新消息时,套接字中的缓冲区都包含所有旧消息(已读取) 和新消息。 我可以通过已知的分隔符(/ r / n)拆分消息并跟踪它们,但这可能是长时间运行通信时内存问题的根源。 [编辑:将代码更新为不再存在缓冲区问题并且工作正常的解决方案]。 有没有人有什么建议。 总重写??? 代码如下,希望它能帮助他人。 这是FullDuplexSocket类: using System; using System.Text; using System.Net.Sockets; namespace Utilities { public class StateObject{ public Socket workSocket = null; public const int BUFFER_SIZE = 1024; public byte[] buffer = new byte[BUFFER_SIZE]; } public class FullDuplexSocket : IDisposable { public event NewMessageHandler OnMessageReceived; […]

Java和C#应用程序之间的套接字通信

我有02个应用程序,一个用java编写,另一个用C#编写。 我需要在它们之间交换数据(字符串),因此我使用套接字连接。 目前,C#应用程序充当服务器,Java应用程序充当客户端。 C#应用程序将持续侦听端口“7777”,Java应用程序将启动一个套接字“localhost:7777”并使用该套接字将数据发送到C#服务器。 我不关闭它们之间的连接,因为我需要经常交换数据。 在我的C#服务器应用程序有时需要将一些字符串发送到Java客户端应用程序之前,一切都很好。 我想使用另一个端口使我的java应用程序成为服务器,C#应用程序也将成为客户端。 但我觉得这不是一个好的解决方案。 P / S:是的,socket是双向的,在我当前的应用程序中,我可以将来自我的C#应用​​程序的字符串数据发送回Java应用程序,但只有当Java应用程序首先将字符串发送到C#应用程序并且现在它正在等待时来自C#应用程序的响应数据。 因此,我想问一下是否还有其他更好的解决方案? 如果我们总共只使用1个端口吗? 非常感谢你。

使用TCP的C#Mutlti-threading文件传输

我正在设计用于从客户端接收文件的TCP服务器。 它为一个客户工作。 但Server需要响应多个客户端。 我不知道如何同时从客户端接收多个文件。 请帮我。 服务器代码: public partial class Form1 : Form { Thread t1; int flag = 0; string receivedPath = “yok”; public delegate void MyDelegate(); private string fileName; public Form1() { t1 = new Thread(new ThreadStart(StartListening)); t1.Start(); InitializeComponent(); } public class StateObject { // Client socket. public Socket workSocket = null; public const […]