![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になっております。
複数のホストで計測したあるdouble型の配列データをひとつのホストに送信してそこで送られたホストによってまとめ、
結果的にはdouble型の二次配列がほしいのですが送信される側のホストに以下のサーバ機能付きのプログラムをいれたところ
(見づらくてすみません、添付にもおいておきます)
プログラム:
import java.io.*;
import java.net.*;
public class RouteFind {
public static int port;
public static Socket socket;
public static ServerSocket sSocket;
public static double Data[][];
public static double RouteNode[][];
public static void main(String args[]) {
Data = getData();
for (int i = 0; i < Data.length; i++) {
System.out.println(RTTMeasure.AddressData[i]);
System.out.println(Data[i]);
System.out.println();
}
}
public static double[][] getData() {
port = 8080;
Data = null;
try {
sSocket = new ServerSocket(port); //sSocket is the socket
while (true) {
socket = sSocket.accept();
Thread t = new SessionProc(socket, Data);
t.start();
}
} catch (IOException e) {
e.printStackTrace();
}
return Data;
}
}
class SessionProc extends Thread {
double[][] data = null;
Socket socket = null;
public SessionProc(Socket s, double[][] data) {
this.socket = s;
}
@Override
public synchronized void run() {
try {
ObjectInputStream in = new ObjectInputStream(
new BufferedInputStream(socket.getInputStream()));
InetAddress cAddr = socket.getInetAddress(); //client address
for (int i = 0; i < RTTMeasure.AddressData.length; i++) {
if (cAddr.getHostName().equals(RTTMeasure.AddressData[i])) {
data[i] = (double[]) in.readObject();
}
}
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
エラー:
java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:97)
at RouteFind.getData(RouteFind.java:35)
at RouteFind.main(RouteFind.java:23)
Exception in thread "main" java.lang.NullPointerException
at RouteFind.main(RouteFind.java:24)
というエラーが出てしまいました。クライアント側はなにも問題がないようです。
各ホストからの通信を別々のスレッドで処理しているつもりなのですがなにがおかしいのでしょうか?
お願いします
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
スタックトレースを見ると
sSocket = new ServerSocket(port); //sSocket is the socket
のとこで例外が発生しているように見えるけど
単に8080ポートを別のアプリケーションが利用しているだけなんじゃない?
No.2
- 回答日時:
教えていただいたサイト拝見しました。
確かに、最初に指定されたポートは開放されて接続待ちになると書かれていますね。妙な疑問を申し上げて失礼しました。
・ポート番号を変えても同じ
・Runメソッドの synchronized を外しても同じ
であれば、ちょっとお力になれなさそうです。ごめんなさい。
No.1
- 回答日時:
エラー:
java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
というエラーなので、ソケットをバインドするさいに、アドレスが既に使用されている、ということは・・?同一のポートで、ソケットが複数同時に使えるものでしょうか?
サイトを検索すると、どうも使えないようなことが書いてありますが。
この回答への補足
このプログラムをつくる上で参考にしたクライアントとサーバプログラムのペアがあるのですが、(↓にあります)
http://www.fumikichan.net/prog/Java/kd050101.jsp
そのプログラムではクライアントを複数ホストにおいて起動させてもスレッド処理の際に自動的にそれぞれ別ポートに割り振って接続しているようだったので↓以降はスレッド処理して
while (true) {
socket = sSocket.accept();
Thread t = new SessionProc(socket, Data);
t.start();
}
一旦接続してもまた繰り返しで接続要求待ちにすれば大丈夫だと思い込んでいました。
なるべくクライアントごとに別々のポートを割り振るのではなく、接続が来次第どんどん処理して時間短縮を図りたいのですが無理でしょうか?
自己解決しまいました。
その都度ホストに入りなおせばポートがリセットされるみたいで
やりにくいですが一旦プログラムを起動した後はまた入りなおせば解決するようです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数を動的に利用するには?
-
プログラミングの問題です。大...
-
GetterとSetterをやったのに。
-
中カッコ{}だけの記述について
-
System.exit()の値を取得したい
-
Socketの接続のタイムアウトを...
-
2進数から10進数への変換方法
-
コンストラクタの引数の中のnew?
-
日本語が文字コードによっては...
-
複数ホストからのデータの受け...
-
javaのudp通信について
-
Javaでlog4jを使ってログ出力を...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
javaで質問です。 文字列2023/2...
-
Java配列でNullPointerExceptio...
-
IF関数でEmpty値を設定する方法。
-
ダブルクォーテーションのrepla...
-
flush()とclose()について
-
カタカナをローマジに変換する。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
プログラミングの問題です。大...
-
中カッコ{}だけの記述について
-
Javaでlog4jを使ってログ出力を...
-
NoSuchMethodErrorが解決できま...
-
Socketの接続のタイムアウトを...
-
コンストラクタの引数の中のnew?
-
javaのプログラミングで作るRPG...
-
System.exit()の値を取得したい
-
JSP/Servletのパラメータの受け...
-
Processing :指定フォルダ内の...
-
javaで特定の文字列から特定の...
-
インタフェイス実装と抽象クラ...
-
Javaで日本語の出力が文字化けする
-
randomで
-
StringクラスのcompareToメソッド
-
【初心者です】javaで平均値を...
-
DESを使用した暗号化/復号化処...
-
初心者なので教えてほしいです。
-
ArrayList でスタックを
おすすめ情報