Tag: udp

从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, […]

接收UDP广播(C#)的答案

我正在尝试发送udp广播,并在c#中收到答案。 虽然发送广播完美,但我没有收到c#中的任何答案。 但是当我看看wireshark时,我可以看到已经发送了一个答案: 从192.168.0.141发送到192.168.0.255 从192.168.0.105发送到255.255.255.255(这将是答案) Wireshark日志: 1 0.000000 192.168.0.141 192.168.0.255 UDP Source port: 55487 Destination port: 17784 2 0.000851 192.168.0.105 255.255.255.255 UDP Source port: 17784 Destination port: 55487 那是我的c#代码: private static byte[] SendBuffer = new byte[] { 1, 2, 3 }; public static void SendAndReceiveBroadcast( byte[] data, IPEndPoint broadcastEndpoint ) { using( Socket broadcastSocket = […]

如何找到分配给UDP客户端的端口号(在.net / C#中)?

如果我使用创建套接字 var socket = new UdpClient(0,AddressFamily.InterNetwork); 然后我如何找到套接字的端口? 我可能很愚蠢,但我在MSDN / Google上没有运气(可能是因为星期五凌晨4点42分,太阳正在闪耀)。 背景: 我想要做的是找到一个开放的端口,然后向另一个进程报告,以便在该端口上向我转发消息。 可能有多个客户端,所以我不想使用固定端口。 谢谢。

UdpClient – 限制缓冲区?

我在C#中遇到了UdpClient问题。 我通过互联网在两个客户端之间传输音频。 在我的麦克风上,采样率为16khz,我发送带有音频的UDP数据包,每个数据包6400字节。 这些从未通过,除了最后的数据包,自从我关闭录音以来通常大约在1200-3400之间。 当我将采样率降低到8khz时,我发送3200字节有效载荷的数据包。 这些总是因某种原因而通过。 因此,基本上3200以上的任何东西都会被拙劣(没有测试确切的数字,但……)为什么这个呢? 我想也许UdpClient内部缓冲区太小或什么的? 由于我流音频数据包被频繁发送。 接收: private void audioReceive(IAsyncResult asyn) { try { byte[] temp = audioSock.EndReceive(asyn, ref this.serverEP); this.waveProvider.AddSamples(temp, 0, temp.Length); this.textbox_display.Text = this.textbox_display.Text + ” got bytes: ” + temp.Length; audioSock.BeginReceive(new AsyncCallback(audioReceive), null); } catch (Exception ez) { MessageBox.Show(“audioReceive: ” + this.textbox_nick.Text + ” ” +ez.ToString()); } } 我找不到任何明显的错误。 […]

关于将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”传递?

Android通过LAN从C#桌面应用程序接收UDP广播?

我正在尝试在PC上为使用相同Wi-Fi网络的许多Android设备创建一个服务器应用程序。 设备将通过接收来自它的UDP广播找到服务器的IP,其中包含服务器IP数据。 我开始在Java中用C#和udp接收器创建一个示例udp广播器,但我从未设法在android端获取数据包。 这是代码: C#: UdpClient listener = new UdpClient(listenPort); IPEndPoint groupEP = new IPEndPoint(IPAddress.Broadcast, listenPort); listener.Connect(groupEP); listener.EnableBroadcast = true; byte[] data = new byte[1024]; try { while (!done) { Console.WriteLine(“broadcast”); Thread.Sleep(400); listener.Send(data,2); } Android代码: DatagramSocket socket; try { socket = new DatagramSocket(11000); socket.connect(getBroadcastAddress(), 11000); socket.setBroadcast(true); byte[] buf = new byte[4]; DatagramPacket packet = new […]

UDP具有多个发送方和一个单一接收方

在一个项目中,我有多个UDP数据发送者,但只有一个接收者。 如果流量变高,接收方“忘记”大量数据包。 我知道这是UDP固有的问题,但我想减少丢失数据包的数量。 我以前读过这个问题! 这是我的代码(请原谅大量的代码块,但我希望这个例子是自包含的) 发件人方: public class UdpSender { private static int portNumber = 15000; public void Send(string data) { var udpServer = new UdpClient(); var ipEndPoint = new IPEndPoint(IPAddress.Broadcast, portNumber); byte[] bytes = Encoding.ASCII.GetBytes(data); udpServer.Send(bytes, bytes.Length, ipEndPoint); udpServer.Close(); } } class Program { static void Main(string[] args) { var sender = new UdpSender(); […]

网络发现对等网络的应用程序

我希望有两个类,一个服务器类和一个客户端类。 服务器类应该接收每个新客户端的IP地址和端口号,并将它们存储在列表中。 它应该为每个客户端提供已连接客户端及其IP地址的列表。 然后,客户端可以使用TCP连接相互通信。 问题是客户端不知道服务器的IP地址是什么。 然而,整个程序将在局域网上运行。 我的猜测是它需要某种UDP广播,但每次我试图暗示它都不起作用,除非程序的两个实例在同一台计算机上运行。 该应用程序将由具有有限计算知识的客户端安装,因此它应该只是在所有计算机上安装程序并插入网络的情况。 如果有人使用C#.net 3.5或更早版本对此进行可靠,明确的实施,我们将不胜感激。

UWP应用程序不从localhost上的.NET桌面应用程序接收UDP数据报

我一直在尝试在作为客户端的UWP应用程序和作为服务器的.NET桌面应用程序之间设置客户端服务器。 我正在使用UDP Datagrams作为两者之间的消息传递系统。 这是我的UWP代码,用于在端口22222上侦听localhost IP上的Datagrams: private async void listenToServer() { // Setup UDP Listener socketListener = new DatagramSocket(); socketListener.MessageReceived += MessageReceived; await socketListener.BindEndpointAsync(new HostName(“127.0.0.1″),”22222”); Debug.WriteLine(“Listening: ” + socketListener.Information.LocalAddress + ” ” + socketListener.Information.LocalPort); } private async void MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) { // Interpret the incoming datagram’s entire contents as a string. uint stringLength = […]

如何从任何IP和任何端口接收UDP数据包?

我想用C#的UdpClient来监听任何收到的UDP数据包。 我想从任何IP和任何端口接收数据包。 我尝试了以下方法: UdpClient udpClient = new UdpClient(0); IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0); byte[] data = udpClient.Receive(ref ep); 但没有成功。 有谁知道什么是错的? 提前致谢!