尝试将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));
但无论我在发送的其他方面做什么似乎都不起作用。好的......我给。我做错了什么。
谢谢, 韦恩
答案 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;
}
}
。