我在寫一些必須單獨綁定到IPv6和IPv4(UDP4,UDP6)的軟件。我有一個現有的代碼庫,可以在其他地方工作,並且無法修改此任務。它的所有榮耀都會自動創建一個既可處理IPv6又可處理IPv4的套接字,因此,當我現有的不可修改代碼嘗試創建第二套套接字時,由於該端口已被使用,所以它會出錯。如何在Java中單獨綁定到IPv6和IPv4
相關:http://docs.oracle.com/javase/7/docs/technotes/guides/net/ipv6_guide/
我可以提供我的代碼,但不認爲這會回答這個問題有所幫助。非常感謝!
我的綁定功能(不是最終的生產代碼):
private void bind(String uuid, String exclusiveStr, String portStr, CallbackContext c){
final JSSocket socket = socketMap.get(uuid);
boolean exclusive = Boolean.parseBoolean(exclusiveStr);
int port=0;
try{
port=Integer.parseInt(portStr);
}catch(Exception e){
//port wasn't there, use default value
}
Log.d("bind", "Attempting to bind uuid: " + uuid + " to port: " + port);
socket.bind(exclusive, port);
Log.d("bind", "new port: " + socket.getPort());
final InetAddress inetAddress = socket.getAddress();
//HashMap<String, String> setAddress= new HashMap<String,String>();
//setAddress.put("address", socket.getAddress().getHostAddress());
//setAddress.put("port", "" + socket.getPort());
JSONObject json = new JSONObject();
PluginResult result;
try {
json.put("address", socket.getAddress().getHostAddress());
json.put("port", "" + socket.getPort());
Log.d("BINDING********", json.toString());
c.success(json.toString());
}catch(JSONException e){
//todo better
e.printStackTrace();
}
}
其他代碼使用的Node.js的數據報模塊。我必須寫入該界面。它有單獨的(我的理解)用於IPv4和IPv6的套接字。
爲什麼現有的代碼庫在這裏工作,當它在別處工作? –
請參閱上面的代碼和原因 –