![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Socketの使用方法について
サーバ側クラスA
クライアント側クラスB
とあり、Aは常駐しておりBから接続が合った場合に処理を行い、
処理後には待機状態に再び戻ります。
上記の場合に
Aのクラスは以下のように作成しましたが、★の部分でCloseではなく、このままこのソケットを使用して待機したいです。
(ほぼ同時刻に複数のアクセスがあるため、資源の事を考えて使いまわしたいです。)
どのような手段があるのかご指導お願い致します。
又、そもそもソケットに関しての理解が足りないとも思いますので、参考サイトを教えていただけると幸いです。
クラスA
ServerSocket svsock = new ServerSocket(port);
while (true) {
Socket socket = svsock.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new PrintWriter(socket.getOutputStream(), true));
// 処理結果を受信
String line;
if ((line = in.readLine()) != null) {
System.out.println("受け取ったメッセージ : " + line);
out.write("サーバで表示。");
out.newLine();
out.flush();
}
socket.close(); // ★
}
No.1ベストアンサー
- 回答日時:
>Closeではなく、このままこのソケットを使用して待機したいです。
何か勘違いしてますね。クライアントからの接続を受け付けるのは
svsockであって、 socketではありません。使用済みのsocketを
残しても再利用できませんし、資源の無駄になるだけです。
例えばFTPサーバではポート番号=21でbindしたソケットでaccept
します。しかし、acceptの戻り値で受け取ったソケットはポートが
21ではありません。当たり前ですが、同じマシン内でポート番号が
同じソケットが複数存在できないからです。また、この機能によって、
同じクライアント-サーバ間で複数のFTP接続ができるのです。
>同時刻に複数のアクセスがある
サーバ側プログラムでは当然の話で、マルチスレッドで対応します。
掲題のプログラムのようにマルチスレッドでない処理の方が不自然
です。
acceptで待機状態になり、クライアントのconnectを受け付けると
次のステップへ進みます。ここで、Threadを継承したクラスを使って、
新スレッドを立ち上げ、以降の処理は新しいスレッドで処理します。
メインスレッドは新スレッドを起動したら、再び、acceptに戻ります。
例え、僅かな処理でもこうすべきです。
ソケットは処理クラスのコンストラクタで渡せば良いでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- 英語 This paper focuses on the literature relevant to t 2 2022/12/02 09:41
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- 英語 figureの意味 3 2023/06/12 05:01
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UDP通信におけるbind関数について
-
同じLAN内パソコンのIPアドレス...
-
エクセル VBA でのCOMポート...
-
recv関数でフリーズしてしまう
-
TCP/IP通信時のサーバーからの受信
-
UdpClient 送信元のIPアドレ...
-
VB6のwinsockでconnectできない
-
UDPで受信終了の合図を出して受...
-
名前付きパイプの通信ポートに...
-
ソケット通信のシミュレータツ...
-
ソケット通信の送受信遅延-02 ...
-
C言語でHTTP1.1のキープアライ...
-
空きポートの取得方法
-
vbでの232c接続プログラムについて
-
UDPのソケットプログラミング
-
ソケットでクライアントのipア...
-
マルチスレッドプログラミング...
-
iアプリでクイズのプログラムを...
-
Javaプログラム同士のプロセス...
-
Winsockを使わずにVBでSocketを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
UDP通信におけるbind関数について
-
recv関数でフリーズしてしまう
-
VB6のwinsockでconnectできない
-
UDP通信する時に、相手にどうや...
-
ソケット通信 同じポート番号...
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Winsockで接続待ちタイムアウト...
-
ソケットを用いた1対多通信につ...
-
ソケットでクライアントのipア...
-
ソケットのクローズについて
-
相手のIPアドレスを取得する方法
-
SIPがNATを越えられない理由
-
Socket通信の0バイト受信について
-
CreateFile関数でCOMポートが開...
-
Connectエラーが出てしまう・・...
-
同じLAN内パソコンのIPアドレス...
-
送信したデータの一部が文字化...
おすすめ情報