• 締切済み

Javaの断続的なSocket通信について

Java標準のSocketクラスで通信プログラムを作ろうと思うのですが、インターネットで散見できるサンプルはだいたい単一のデータを送ってそのままプログラムを終わらせてしまうため、繰り返しデータを送る場合のプログラミングの方法がいまいちわかりません。 同一の接続先に断続的にデータを送信する場合は、新しいデータごとにSocketクラスを作り直さないといけないのでしょうか。それとも既存のSocketクラスのメソッドを使ってループ内で送信の待機をさせるのでしょうか。

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.1

こうしなければいけないという決まりがあるわけではないのでプログラムに対する要求仕様によるかと思いますよ。

Tank2005
質問者

補足

具体例が得られなかったのでほかのQ&Aサイトで尋ねることにします。

関連するQ&A

  • JavaのSocketで、データを送ったのに応答が

    JavaのSocketで、データを送ったのに応答がありません。 iPod touchで、データを送ったらオウム返しのように送られてきたデータをそのまま返すプログラムを実行しました。 パソコンのJavaでソケット通信を行い、接続とウェルカム文は表示できました。 しかし、データを送ったのに帰ってきません。 おかしいので、telnetで確認したところ、うまく作動しました。 となると、telnetではうまくいき、javaのソケットではうまくいかない…javaが原因と思います。 telnetとjavaのソケットとでは、何か違いがありますか? javaでは、入力された文字列をそのまま送信しています。エンコードや何かが必要ですか?

    • ベストアンサー
    • Java
  • Socket通信プログラム

    VisualC++6.0(SDK)を用いてSocket通信(UDP)プログラムを 作成(チャットやメッセンジャーのようなもの)しています。 送信用と受信用 1つのプログラムにて、送受信両方の機能を兼ね備えたものを作成しようと思っています。 で、送信側から送ったデータを受信側で処理(文字列の追加など)をして 受信側から送信側に送り戻したいとおもいます。 送信ボタンにより送信します。受信したデータはエディットボックスに表示します。 が、受信したデータを送り返すとしているために、 いつまでも、受信->送信->受信・・・・を繰り返してしまいます。 これを、正しく動作するようにするには、どのようにしたら良いのでしょうか? ご存知の方宜しくお願い致します。 足りないものがあったら、補足させていただきます。

  • Javaプログラム同士のプロセス間通信について

    Java初心者です。 デーモン化したJavaプログラムとJavaサーブレット間のプロセス間通信を 行いたいと思っていますがどのようにしたものか悩み中です。 ○デーモン化したJavaプログラムは、 1、あるポートからSocket通信でデータを受信し、受信したデータをDBに格納する 2、クライアントからの要求で1で保存したデータを加工して送信 ○サーブレットプログラムでは、 上記のデーモン化プログラムの設定等をブラウザ上から変更できるようにしたいと考えています。 設定とは、例えば受信したデータを全てDBに保存せずに ブラウザから条件を設定できてフィルターするような動作に変更できたり、 また、デーモン化プログラムの動作をブラウザ上から停止、開始できるようにしたいのです。 上記の様な構成の場合にプロセス間通信をする必要があると思いますが、 どの様なプロセス間通信を使えばいいのか悩んでいます。 ほんとうは上記の様な2つのプログラムを1つのプログラムで出来ればいいなぁ~と考えているのですが、、 実現方法が判りません。。 なにか名案はございませんでしょうか? わかりづらい説明でもうしわけございません。 参考になるかわかりませんが、イメージ図を、 <イメージ図> デ  data   開  data    ク ー --------> 発 -------->  ラ タ        中         イ 鯖        鯖         アント          ↑          |          |設定変更          |       管          └--------- 理                   者 よろしくおねがいします。

    • ベストアンサー
    • Java
  • java ネットワークの本について

    こんにちは。 趣味でプログラミングをしているものです。 さっそくですが質問させていただきます。 まずは以下のURLから3ばんめのリンク先を 見ていただきたいのですが... http://www.eonet.ne.jp/~mycabinet 「基礎からわかる TCP/IP Javaネットワークプログラミング」 の第2版の105ページに記載されている、内容をもとに コマンドプロンプトを2つ起動し、 Socket と ServerSocket で 時刻を送信、受信するプログラムを動かしてみたのですが、 要請を受けて時刻を教える側から 例外を発生させて 終了してしまいました。 スタックトレースは次のようなものです。 java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) -(1) at java.net.SocketOutputStream.socketWrite(Unknown source) -(2) at java.net.SocketOutputStream.write(Unknown source) -(3) at Netclock.start(Netclock.java:58) at Netclock.main(Netclock.java:83) このうち(1),(2),(3)のSocketOutputStream というのは 「JavaTM Platform, Standard Edition 6 API 仕様」 に載っていなかったのですが、 このAPIには含まれていないクラス、ということでしょうか? (2),(3)のUnknown source についてインターネットでみてみたところ、 デバッグ情報としての行番号などを削除している、というような 記述を見かけたのですが、意味はよくわからないのですが、 APIにこれらのクラス、メソッドはあるということでしょうか? ご存知の方、教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • Socket通信でのデータの受け渡し

    サーバーが受けたデータを、クライアントに返す プログラムですが、 サーバーは、クライアントからのデータを、 while(true){ BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); str=br.readLine(); if(str!=null){ PrintWriter pr=new PrintWriter(s.getOutputStream()); pr.println(str); pr.flush(); }}で、返すようにしています。 クライアントも大体同じです(PrintWriterは、 Buttonを押した時に、取得しています)。 考え方としては、inputstreamは、無限ループで、 取得し、outputstreamは、必要におうじて、取得し データを送っています。 しかし、これだと、一度データを送ると、次から データの受け渡しが出来なくなります。 socketか、inputstreamかoutputstreamのどれかが、 閉じるか、使えなくなるのだと思いますが、 いつもここで、悩んでいます。 (また、無限ループで、BufferedReaderオブジェクト をつくり続けるというのも、ちょっと不安)。 どこに問題があるのか、分かる人教えてください。 お願いします。

    • ベストアンサー
    • Java
  • VB .NETでのSocket間通信について

    すいません。Socket間通信のプログラムについて教えてもらえませんか。 System.Net.Socketsを使用してプログラムを作成するのだと思うのですが、 未熟なため困っております。 内容は以下の通りです。 ある機器がネットワークにぶら下がっております(IP Address : 192.168.1.99) その機器に対してネットワーク上のPCから次のようなコマンドを打ちます。 RQ A0,1,0 ---- 単なるパラメータなのでそのままテキストで送信 するとその機器は OK [バイナリデータ] として、バイナリデータは画像ファイルを送信してきます。 で、私がやろうとしていることはそのバイナリデータの画像ファイルをコマンド を投げたPCにファイルとして取得したい(例えば001.bmpなど)のです。 テキストとバイナリがごっちゃになっていて更にデータをダウンロードすると いうので実はパニッくっています。 少しのヒントでよいので、突破口になりそうなヒントや参考にしたらいいHPを教え てもらえると助かります。 ・・・MSDNは見ているのですが。。。理解力が乏しいので少しでもう少しわかりやすい HP等があればと思い投稿させていただきます。

  • SocketでXMLオブジェクトを送信したい

    SocketでXMLオブジェクトを送信するにはどうしたら いいのでしょうか。 たとえば、 PrintWriterのprintln("<?xml ~><name></name>") では、XMLオブジェクトを送信したことにはならない ようです。 文字列をXMLに変換するメソッドがあるのか、 その場合の送信は、PrintWriterでできるのか、 とか、分かる人がいましたら教えてください。

  • androidのsocketエラー

    androidのソケット通信プログラムを作成しています。 何度もソケットの接続・切断を繰り返していると、以下のエラーが発生します。 Socket.connect メソッド(接続)で発生しています。 socketは毎回.closeメソッドで切断しています。 このようになると、端末を再起動しない限りソケット接続を再度行なうことはできない模様です。このエラーの発生理由がわかりません。お詳しい方おられましたら何卒よろしくお願いします。 ちなみに利用しているandroid端末はKYL21(京セラ androidバージョン4.0.4)です。 01-09 09:06:46.418: W/System.err(29936): java.net.ConnectException: failed to connect to /192.168.10.12 (port 50000): connect failed: ENOBUFS (No buffer space available) 01-09 09:06:46.418: W/System.err(29936): at libcore.io.IoBridge.connect(IoBridge.java:114) 01-09 09:06:46.418: W/System.err(29936): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 01-09 09:06:46.418: W/System.err(29936): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460) 01-09 09:06:46.418: W/System.err(29936): at java.net.Socket.connect(Socket.java:838) 01-09 09:06:46.418: W/System.err(29936): at java.net.Socket.connect(Socket.java:791) 01-09 09:06:46.418: W/System.err(29936): at com.example.simple_test.Wifi_Service.Socket_Connect(Wifi_Service.java:2033) 01-09 09:06:46.428: W/System.err(29936): at com.example.simple_test.Wifi_Service$10.run(Wifi_Service.java:1938) 01-09 09:06:46.428: W/System.err(29936): Caused by: libcore.io.ErrnoException: connect failed: ENOBUFS (No buffer space available) 01-09 09:06:46.428: W/System.err(29936): at libcore.io.Posix.connect(Native Method) 01-09 09:06:46.428: W/System.err(29936): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 01-09 09:06:46.428: W/System.err(29936): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 01-09 09:06:46.428: W/System.err(29936): at libcore.io.IoBridge.connect(IoBridge.java:112) 01-09 09:06:46.428: W/System.err(29936): ... 6 more

  • Socketの使用方法について

    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(); // ★ }

    • ベストアンサー
    • Java
  • javaのudp通信について

    javaのudp通信を使用して簡単なチャットプログラムを作っています。サーバーなどは使用しないものです。 送信、受信それぞれのプログラムはできました。送信は送信を繰り返し、受信も受信を繰り返すものです。それをひとつにしたいと考えています。 送信プログラムの詳細はhttp://oshiete1.goo.ne.jp/qa3743572.htmlです。 受信プログラムは下記です。 ご指導お願いします。 ******************************** import java.net.*; public class reciverTest { DatagramPacket packet1; private DatagramSocket socket1; private int port = 19800; public reciverTest() throws Exception { this.socket1 = new DatagramSocket(this.port); } public String receive() throws Exception { byte buffer[] = new byte[256]; int i; packet1 = new DatagramPacket(buffer, buffer.length); this.socket1.receive(packet1); // blocking for (i = 0; i < buffer.length; i++) { if (buffer[i] == '\0') { break; } } String msg = new String(packet1.getData(), 0, i); return msg; } public void close() throws Exception { socket1.close(); } public static void main(String[] args) { reciverTest receiver1; System.out.println("Waiting ..."); try { receiver1 = new reciverTest(); while(true) { String msg = receiver1.receive(); System.out.println("受信したデータ⇒『" + msg +"』を受信しました。"); receiver1.close(); } } catch (Exception ex) { System.err.println("Error: " + ex.getMessage()); } } }

    • ベストアンサー
    • Java

専門家に質問してみよう