AndroidのBindExceptionとErrnoExceptionについて
今現在、AndroidでUDPによるネット通信を伴うプログラムを勉強していますが、どうもエラーが取り除けないので質問させていただきます。
作成中のプログラムは、UDP通信を用いてテキストデータを相手方に投げようとしています。何度も試行錯誤しましたがBindExceptionとErrnoExceptionだけが取り除けないのでコードの変え方や取り除き方を教えてただければと思います。以下がコード(一部抜粋)になります。
よろしくお願いします。
MainActivity.java
public class MainActivity extends AppCompatActivity {
static Button btnSend,;
static EditText txtIPAddress,txtPort,txtMessage;
static String address,message;
static int port;
Context context;
AsyncTaskTest1 task1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//全てのボタンやテキストなどのIDを見付ける。
txtIPAddress =(EditText)findViewById(R.id.txtIPAddress);
txtPort =(EditText)findViewById(R.id.txtPort);
txtMessage = (EditText)findViewById(R.id.txtMessage);
btnMessage = (Button)findViewById(R.id.btnMessage);
txtMessageBox = (TextView)findViewById(R.id.txtMessageBox);
btnMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//まずは入力された値を確定し、接続を確立する
address = txtIPAddress.getText().toString();
port = Integer.parseInt(txtPort.getText().toString());
message = txtMessage.getText().toString();
if(message.equals("")){
txtMessageBox.setText("メッセージを入力してください。");
}else{
txtMessageBox.setText(message);
}
try {
task1 = new AsyncTaskTest1(context);
} catch (UnknownHostException e) {
e.printStackTrace();
}
task1.execute();
}
});
}
~~以下略~~
AsyncTaskTest1.java
public class AsyncTaskTest1 extends AsyncTask<Void,Void,Void> {
~~中略~~
public AsyncTaskTest1(Context context) throws UnknownHostException {
try {
this.context = context;
this.address = MainActivity.address;
this.message = MainActivity.message;
this.txtMessageBox = MainActivity.txtMessageBox;
this.port = MainActivity.port;
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected Void doInBackground(Void... params) {
try {
this.addar = InetAddress.getByName(address);
this.buf = message.getBytes();
this.dSocket = new DatagramSocket();
this.packet1 = new DatagramPacket(buf, buf.length,addar,port);
dSocket.send(packet1);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
このコードになる前に、出ていたエラーの対処としてSocketの引数に指定していた相手のアドレス、ポート番号をPacketの引数に持っていきました。これで正しいのでしょうか?あるいは両方の引数に指定すべきなのでしょうか?
また、btnMessageを押した際に、上記のエラーが出てきますが、うまくバインドできていないことが原因かと思われます。正しいバインドの方法などが今一つ明確ではないです。疑問は尽きませんが、お力添えの方よろしくお願いします。