Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 如何在多播组中发送消息(有线到无线)_C# 4.0_Network Programming - Fatal编程技术网

C# 4.0 如何在多播组中发送消息(有线到无线)

C# 4.0 如何在多播组中发送消息(有线到无线),c#-4.0,network-programming,C# 4.0,Network Programming,我的项目是让两个设备相互通信,一个是笔记本电脑,另一个是台式机,使用c#中的Sockets类。笔记本电脑通过无线连接连接到路由器,而台式电脑连接到LAN或有线连接到同一路由器 问题是当我让笔记本电脑向桌面发送数据时,桌面没有收到任何数据。但当我尝试通过另一台通过无线连接的笔记本电脑发送信息时,第一台笔记本电脑能够接收另一台笔记本电脑发送的数据 using System; using System.Collections.Generic; using System.Linq; using Syst

我的项目是让两个设备相互通信,一个是笔记本电脑,另一个是台式机,使用c#中的Sockets类。笔记本电脑通过无线连接连接到路由器,而台式电脑连接到LAN或有线连接到同一路由器

问题是当我让笔记本电脑向桌面发送数据时,桌面没有收到任何数据。但当我尝试通过另一台通过无线连接的笔记本电脑发送信息时,第一台笔记本电脑能够接收另一台笔记本电脑发送的数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Collections;

namespace gslib
{

public class StateObject
{
    private Socket m_socket;
    private byte[] m_data;
    private StringBuilder m_message;

    public StateObject()
    {
        m_message = new StringBuilder();
    }

    public Socket Socket
    { 
        set { m_socket = value; } 
        get { return m_socket; } 
    }
    public byte[] Data
    { 
        set { m_data = value; } 
        get { return m_data; } 
    }
    public StringBuilder Message
    {
        set { m_message = value; }
        get { return m_message; }
    }
}

public class GroupAgent
{
    private const int BUFFERSIZE = 4096;

    public GroupAgent()
    {
        m_ip = string.Empty;
        m_port = -1;
    }

    public GroupAgent(string ip, int port)
    {
        m_ip = ip;
        this.m_port = port;
    }

    #region decleration

    private string m_ip;
    private int m_port;

    #endregion

    #region events

    public delegate void MessageRecievedEventhandler(string message);
    public event MessageRecievedEventhandler MessageRecieved;

    #endregion

    #region private methods

    private byte[] trimByte(byte[] receive, int x)
    {
        List<byte> temp = new List<byte>();
        for (int i = 0; i < x; i++)
        {
            temp.Add(receive[i]);
        }
        return temp.ToArray();
    }

    private void receive(Socket sock)
    {
        StateObject state = new StateObject();
        state.Socket = sock;
        state.Data = new byte[BUFFERSIZE];

        sock.BeginReceive(state.Data, 0, BUFFERSIZE, SocketFlags.None, new    AsyncCallback(DoReceiveFrom), state);
    }

    private void DoReceiveFrom(IAsyncResult iar)
    {
        StateObject state = (StateObject)iar.AsyncState;   
        try
        {                             
            int count = state.Socket.EndReceive(iar);

            byte[] temp = trimByte(state.Data, count);

            if (MessageRecieved != null)
            {
                MessageRecieved(ASCIIEncoding.ASCII.GetString(temp));
            }

            state.Socket.BeginReceive(state.Data, 0, BUFFERSIZE, SocketFlags.None, new AsyncCallback(DoReceiveFrom), state);
        }
        catch 
        {
            state.Socket.BeginReceive(state.Data, 0, BUFFERSIZE, SocketFlags.None, new AsyncCallback(DoReceiveFrom), state);
        }
    }

    #endregion

    #region public properties

    public string _GroupIP
    {
        set { m_ip = value; }
        get { return m_ip; }
    }

    public int _Port
    {
        set { m_port = value; }
        get { return m_port; }        
    }

    #endregion

    #region public methods

    public void connect()
    {
        Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
        sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 
ProtocolType.Udp);
        sock.Bind(new IPEndPoint(IPAddress.Any, _Port));

        sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new 
MulticastOption(IPAddress.Parse(_GroupIP), IPAddress.Any));
        sock.SetSocketOption(SocketOptionLevel.IP, 
SocketOptionName.MulticastTimeToLive, 2);

        receive(sock);           
    }

    public void connect(string m_ip, int port)
    {
        _GroupIP = m_ip;
        _Port = port;
        connect();
    }

    public void sendMessage(string message)
    {
        byte[] msg = ASCIIEncoding.ASCII.GetBytes(message);
        Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 
ProtocolType.Udp);

        sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new 
MulticastOption(IPAddress.Parse(_GroupIP)));
        sock.SetSocketOption(SocketOptionLevel.IP, 
SocketOptionName.MulticastTimeToLive, 2);

        IPEndPoint iep = new IPEndPoint(IPAddress.Parse(_GroupIP), _Port);
        sock.Connect(iep);

        sock.Send(msg);

        sock.Close();
    }

    #endregion
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Net.Sockets;
Net系统;
使用系统集合;
命名空间gslib
{
公共类状态对象
{
专用插座m_插座;
专用字节[]m_数据;
私有StringBuilder m_消息;
公共状态对象()
{
m_message=新的StringBuilder();
}
公用插座
{ 
设置{m_socket=value;}
获取{return m_socket;}
}
公共字节[]数据
{ 
设置{m_data=value;}
获取{return m_data;}
}
公共StringBuilder消息
{
设置{m_message=value;}
获取{return m_message;}
}
}
公共类组代理
{
private const int BUFFERSIZE=4096;
公共团体代理()
{
m_ip=string.Empty;
m_端口=-1;
}
公共GroupAgent(字符串ip,int端口)
{
m_ip=ip;
this.m_port=端口;
}
#区域性消肿
私有字符串m_ip;
私人国际港口;
#端区
#地区活动
公共委托无效消息ReceiveDevenHandler(字符串消息);
公共事件消息ReceivedEventHandler消息Received;
#端区
#区域私有方法
专用字节[]三字节(字节[]接收,整数x)
{
列表温度=新列表();
对于(int i=0;i
我这里缺少什么?。我必须在我的路由器上设置什么吗?。请回复

sock.Bind(new IPEndPoint(IPAddress.Any, _Port));

问题就在这里。这会导致UDP根据单播IP路由表路由传出数据报,如果路由表不喜欢无线路由,则不会使用它。将其绑定到本地wifi接口的IP地址。

当我将其绑定到无线接口时,我无法再接收或发送数据。。。对这个有什么建议吗?。注意:im使用多播组IP进行通信,顺便说一下,感谢您的回复。要通过所有接口接收,您必须通过所有接口加入该组。INADDR_ANY也不足以做到这一点。你能告诉我通过所有接口加入团队的正确方法吗?非常感谢。m_ip和port.m_ip=224.0.1.0 port=1234的值是多少