标签: udpclient

C#UDP客户端读取组播IP(本地接口),并向VPN发送单播UDP

我有一个VPN客户端,可以通过VPN管道发送单播UDP数据包,但不支持多播IP(UDP)数据包(OpenVPN).所以我想我可以编写这个带有IP(端口3000)多播的小垫片,并通过VPN作为单播发送它们.

我看到组播数据包到了,但我看不到任何东西到达VPN端(WireShark没有帮助,因为不像IpConfig/all)它没有看到VPN接口.).

我认为我的问题可能是我不清楚BIND和CONNECT之间的区别,以及我应该将UDPClient绑定到哪个接口(vpn或local).

命令行是:

239.0.0.0 198.168.0.15 10.4.30.239 172.27.225.77
arg[0] = multicast from address
arg[1] = unicast to address
arg[2] = local physical ethernet assigned address
arg[3] = virtual address of computer on VPN network (client)
Run Code Online (Sandbox Code Playgroud)
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;

namespace MUTunnel
{
    public class EchoBot
    {
        protected UdpClient sender;
        protected UdpClient listener;

        protected const int listenPort = 3000;
        protected const int outPort = 3000;

        protected IPEndPoint inPoint;
        protected IPEndPoint outPoint;
        protected IPAddress listenAddress;
        protected …
Run Code Online (Sandbox Code Playgroud)

c# multicast udpclient windows-networking

9
推荐指数
1
解决办法
790
查看次数

如何在循环中使用UdpClient.BeginReceive

我想做这个

for (int i = 0; i < 100; i++ )
{
    Byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
}
Run Code Online (Sandbox Code Playgroud)

UdpClient.Receive我不得不使用,而不是使用UdpClient.BeginReceive.问题是,我该怎么做?没有很多样本使用BeginReceive,MSDN示例根本没有帮助.我应该使用BeginReceive,还是只在一个单独的线程下创建它?

我一直都是ObjectDisposedException例外.我只收到第一个发送的数据.下一个数据将抛出异常.

public class UdpReceiver
{
    private UdpClient _client;
    public System.Net.Sockets.UdpClient Client
    {
        get { return _client; }
        set { _client = value; }
    }
    private IPEndPoint _endPoint;
    public System.Net.IPEndPoint EndPoint
    {
        get { return _endPoint; }
        set { _endPoint = value; }
    }
    private int _packetCount;
    public int PacketCount
    {
        get …
Run Code Online (Sandbox Code Playgroud)

c# udpclient beginreceive

8
推荐指数
2
解决办法
2万
查看次数

如何知道c#UdpClient使用的端口号?

我正在使用c sharp创建一个客户端服务器应用程序.服务器正在使用具有固定端口号的tcplistener.客户端使用tcpclient连接到服务器.连接后,客户端和服务器都使用此连接进行通信.然后,应用程序创建新的udp连接以发送和接收消息.由于服务器假设从单个客户端接受多个连接,我必须区分每个连接与不同的端口.为了做到这一点,我得先1.服务器上创建udpclient(自动使用未使用的UDP端口的服务器).2.将服务器udpclient使用的端口号发送给客户端.3.客户端使用指定的端口号将数据发送到服务器.

问题是,如何创建一个udpclient,你可以知道使用的端口号?

c# port udpclient

7
推荐指数
1
解决办法
1万
查看次数

localhost上UDP包丢失的原因?

在我的WPF4.0应用程序中,我有一个UDP如下所示的监听器.在我的Windows 7 PC上,我正在运行服务器和客户端localhost.

每个接收到的数据报都是较大位图的扫描线,因此在收到所有扫描线后,UI线程上会显示位图.这似乎有效.但是,偶尔会丢失一些1-50%的扫描线.我希望这在弱网络连接上,但在本地运行时不会.

UDP使用以下代码可能导致包丢失的原因是什么?

IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, PORT);
udpClient = new UdpClient(endPoint);
udpClient.Client.ReceiveBufferSize = 65535; // I've tried many different sizes...

var status = new UdpStatus()
{
    u = udpClient,
    e = endPoint
};

udpClient.BeginReceive(new AsyncCallback(UdpCallback), status);

private void UdpCallback(IAsyncResult ar)
{
    IPEndPoint endPoint = ((UdpStatus)(ar.AsyncState)).e;
    UdpClient client = ((UdpStatus)(ar.AsyncState)).u;

    byte[] datagram = client.EndReceive(ar, ref endPoint);

    // Immediately begin listening for next packet so as to not miss …
Run Code Online (Sandbox Code Playgroud)

c# udp udpclient

7
推荐指数
1
解决办法
1812
查看次数

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

如果我使用创建套接字

var socket = new UdpClient(0,AddressFamily.InterNetwork);
Run Code Online (Sandbox Code Playgroud)

然后我如何找到套接字的端口?

我可能很愚蠢,但我在MSDN /谷歌上没有运气(可能是因为星期五是4:42,太阳正在闪耀).

背景:

我想要做的是找到一个开放的端口,然后向另一个进程报告,以便在该端口上将消息转发给我.可能有多个客户端,所以我不想使用固定端口.

谢谢.

c# udp udpclient

6
推荐指数
1
解决办法
7496
查看次数

在C#中接收UDP广播消息

我知道很多次都会问过这个问题.我已经阅读了所有答案并尝试了一些我能找到的代码.几天后,我非常绝望,我不得不向你寻求帮助.

我的家庭网络中有一台设备和一台PC.设备发送UDP广播消息.在我的电脑上,我可以在wireshark中看到这些消息:

来源目的地长度

192.168.1.102 0.0.0.0 UDP 60源端口:9050目标端口:0

这意味着数据包到达我的PC.我的下一步是创建一个接收这些数据包的C#应用​​程序.如上所述,我尝试了所有可能的解决方案,但它不会收到任何东西.

所以我想必须有一些非常基本的我做错了.谁能帮我吗?谢谢!

c# udp broadcast udpclient wireshark

6
推荐指数
1
解决办法
2653
查看次数

UDP:从所有网络接口读取数据

我有以下代码来读取来自网络的多播消息,用于指定的IP +端口

private static void ReceiveMessages(int port, string ip, CancellationToken token)
{
    Task.Factory.StartNew(() =>
        {
            using (var mUdpClientReceiver = new UdpClient())
            {
                var mReceivingEndPoint = new IPEndPoint(IPAddress.Any, port);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.Bind(mReceivingEndPoint);
                mUdpClientReceiver.JoinMulticastGroup(IPAddress.Parse(ip), 255);

                while (!token.IsCancellationRequested)
                {
                    byte[] receive = mUdpClientReceiver.Receive(ref mReceivingEndPoint);

                    Console.WriteLine("Message received from {0} ",mReceivingEndPoint);
                }
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

我有两个网络适配器,我从这个多播ip +端口发送数据(由两个wireshark实例监控每个网络适配器确认).对于两个网卡,我在wireshark上看到很多流量来自那些端口+ IP).

问题是在我的控制台上,我只看到来自一个网卡的消息.

我用netstat双重检查,我的端口上没有任何其他软件监听: 在此输入图像描述

那么为什么我只从我的两张网卡中获取流量呢?

编辑:

我甚至尝试了以下方法:

private static void ReceiveMessages(int port, string ip, CancellationToken token, IEnumerable<IPAddress> ipAddresses)
{
    foreach (IPAddress …
Run Code Online (Sandbox Code Playgroud)

c# sockets udp network-programming udpclient

6
推荐指数
2
解决办法
9898
查看次数

套接字没有属性AF_INET?

我正在尝试从我的一本教科书中进行套接字编程分配.. UDP连接..

UDPServer.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print('The server is ready to receive:')
while 1:
    message, clientAddress = serverSocket.recvfrom(2048)
    modifiedMessage = message.upper()
    serverSocket.sendto(modifiedMessage, clientAddress)
Run Code Online (Sandbox Code Playgroud)

UDPClient.py

from socket import *
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(socket.AF_INET, socket.SOCK_DGRAM)
message = raw_input('Input lowercase sentence:')
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print (modifiedMessage)
clientSocket.close()
Run Code Online (Sandbox Code Playgroud)

为什么我在运行客户端时遇到此错误?

Traceback (most recent call last):
  File "UDPClient.py", line 4, in <module>
    clientSocket = (socket.AF_INET, socket.SOCK_DGRAM)
AttributeError: type …
Run Code Online (Sandbox Code Playgroud)

python sockets firewall udpclient

6
推荐指数
1
解决办法
1万
查看次数

(显然)优雅地关闭UDPClient使套接字被阻止

以下代码尽管显然关闭了UDP套接字,但仍然无法重新连接到同一个地址/端口.

这些是我使用的类变量:

    Thread t_listener;
    List<string> XSensAvailablePorts;
    private volatile bool stopT_listener = false;        
    volatile UdpClient listener;
    IPEndPoint groupEP;
Run Code Online (Sandbox Code Playgroud)

我用一个处理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();
        }
Run Code Online (Sandbox Code Playgroud)

该方法如下(我使用超时Receive,以便在套接字上没有发送任何内容并且正在发出时不会阻止它Stop):

    private void UDPListener()
    {
        int numberOfPorts = XSensAvailablePorts.Count();
        int currAttempt = 0;
        int currPort = 0;
        bool successfullAttempt = false;
        while (!successfullAttempt && currAttempt < numberOfPorts)
        {
            try
            {
                currPort = Int32.Parse(XSensAvailablePorts[currAttempt]); …
Run Code Online (Sandbox Code Playgroud)

.net c# sockets multithreading udpclient

6
推荐指数
1
解决办法
2540
查看次数

UDP 客户端未在 linux 机器上接收消息

我有一个程序来发现网络上的客户端,负责发现的类库是.net standard 2. 它在 Windows 机器上运行良好,但现在我需要在 linux 上运行它,而我的 UdpClient 没有收到消息,即使很困难,我确实看到它们从 linux 机器上的 tcpdump 客户端发送到正确的地址,这意味着他们确实得到了发现消息并回复它,它只是在代码中没有到达我的 UdpClient.Receive 方法。

        private bool Start(IPEndPoint localEP, IPEndPoint remoteEP)
        {
            try
            {
                MulticastOption mcastOption = new MulticastOption(remoteEP.Address, localEP.Address);
                List<byte> msg = new List<byte>();
                // message type: Discovery
                

                byte[] discoveryMessage = CreateDiscoveryMessage();


                UdpClient managerClient = new UdpClient(localEP);
                managerClient.Client.SetSocketOption(SocketOptionLevel.IP,
                                                SocketOptionName.AddMembership,
                                                mcastOption);
                managerClient.Client.SetSocketOption(SocketOptionLevel.IP,
                                           SocketOptionName.MulticastLoopback,
                                           0);



                Task.Run(() =>
                {
                    while (!_token.IsCancellationRequested)
                    {
                        IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);

                        // Receive solicitation message
                        byte[] ret = managerClient.Receive(ref ep);
                        Console.WriteLine($"Message recieved …
Run Code Online (Sandbox Code Playgroud)

c# udpclient asp.net-core .net-standard-2.0

6
推荐指数
0
解决办法
169
查看次数