通过端口nnnn进行UDP广播

时间:2015-10-07 16:30:04

标签: c# sockets

尝试将Delphi应用程序迁移到C#,但无法使用port nnnn找到如何向网络上的每台计算机广播。

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

这应该正确设置我的端口地址。然后我设置我的套接字选项并绑定结束点。

s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
s.Bind(new IPEndPoint(IPAddress.Any, 3333));

但无论我在发送的其他方面做什么似乎都不起作用。好的......我给。我做错了什么。

谢谢, 韦恩

1 个答案:

答案 0 :(得分:1)

如果要发送到子网中的所有主机,则必须使用广播IP地址sendto

255.255.255.255 UdpClient udp = new UdpClient(); PEndPoint groupEP = new IPEndPoint(IPAddress.Parse("255.255.255.255"), GroupPort); string str4 = "Is anyone out there?"; byte[] sendBytes4 = Encoding.ASCII.GetBytes(str4); udp.Send(sendBytes4, sendBytes4.Length, groupEP);

另见https://msdn.microsoft.com/en-us/library/tst0kwb1(v=vs.110).aspx 它使用的是UDP客户端,我认为它也可能对你有用。

请注意链接中的以下声明:

  

将IP地址的所有位设置为1或255.255.255.255,形成有限的广播地址。将UDP数据报发送到此地址会将消息传递到本地网段上的任何主机。由于路由器从不转发发送到该地址的消息,因此只有网段上的主机才会收到广播消息。

你应该得到这样的东西:

IPAddress.Broadcast

如果直接使用套接字,则可以使用相同的过程。如果您不喜欢解析,也可以使用public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView list = (ListView) findViewById(R.id.stylistDisplay); //To keep things simple I am sending only one item of the list to the adapter list.setAdapter(new StylistAdapter(Cart.getList().get(0), this)); } static class StylistAdapter extends BaseAdapter { Stylist stylistObj; Context context; LayoutInflater inflater; public StylistAdapter(Stylist obj, Context context) { this.stylistObj = obj; this.context = context; inflater = ((Activity)this.context).getLayoutInflater(); } @Override public int getCount() { return 1; } @Override public Object getItem(int position) { return stylistObj; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewItem item; if (convertView == null) { convertView = inflater.inflate(R.layout.stylist_photos_view_pager, null); item = new ViewItem(); item.photosViewPager = (ViewPager) convertView.findViewById(R.id.photos_view_pager); convertView.setTag(item); } else { item = (ViewItem) convertView.getTag(); } PhotosAdapter adapter = new PhotosAdapter(context); item.photosViewPager.setAdapter(adapter); return convertView; } private class ViewItem { ViewPager photosViewPager; } }