JavaのSocketでデータを送るものの応答がない

このQ&Aのポイント
  • JavaのSocketでデータを送信しても応答がない問題が発生しています。
  • telnetでは正常に動作するが、Javaのソケットでは問題が発生するため、原因はJavaにある可能性があります。
  • Javaのソケットでデータを送信する際、適切なエンコードや設定が必要かもしれません。
回答を見る
  • ベストアンサー

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

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

ひょっとしたら前提を読み間違っているかもしれないので確認。Echoサーバーという名称を使用する。 1.iPod TouchはEchoサーバー側だよね? (iPod TouchでJavaは動くの? iPod Touch側のプログラムもJavaで書いてるの? それとも実行しましたとしか書いてないのでよそ様が作ったもの?) 2.パソコンのJavaっつーのがEchoクライアント側で今そこをあなたが作っているんだよね? で、それがうまく動いてないんだよね? Java側がEchoクライアントとして、Echoサーバーに送信したデータが折り返し帰ってこないなら文字を送った後に\r\nとか「俺の送信は終わりましたよ」というのを送ってないとかそんな可能性がある、くらいかなぁ。

formgomirin
質問者

お礼

ありがとうございます! サーバー側で、『送られたデータを文字列に変換してから表示』から『送られた文字を表示』にかえてみたところ、telnetでは最後に『\r\n』が来ていました。javaでは『null』が送信されてました。どうらや、クライアント側のエラーのようでした。 ネットワークプログラムは、クライアント側のバクも視野に入れなければいけないんですね… ありがとうございました!

関連するQ&A

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

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

  • 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

  • JavaからCにソケット通信で文字列を送りたいのですが、

    JavaからCにソケット通信で文字列を送りたいのですが、 Java側で Socket socket = new Socket("localhost", 7000); のところで Connection refused: connect のエラーが出ています。 C側は接続待ちの状態になっているのですが、 これはどうしたら回避できるのでしょうか?

  • 複数ホストからのデータの受け取り方

    お世話になっております。 複数のホストで計測したある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) というエラーが出てしまいました。クライアント側はなにも問題がないようです。 各ホストからの通信を別々のスレッドで処理しているつもりなのですがなにがおかしいのでしょうか? お願いします

  • javaがFirefoxで利用できない

     FirefoxでJavaを使用しているHPではサイトを開こうとすると「プログラムが応答してませんので終了して下さい」と表示され動かなくなり「Firefox」を閉じねばなりません。 この状態の改善方法を教えてください。  その状態での「ツール」の「Javaコンソール」を開くと下部欄外に次のように表示されている  ・kookieサービスを利用できません-キャッシュを使ってkookieを決定  します  ・kookieサービスを利用できません-set-kookie無視します  そこで[Mozilla Firefox]を開いた時に「Javaコンソール」の「トレースレベルの設定」を行うと作動するが「 Firefox]を閉じると、また同様に作動しない。(Javaをアンインストールを行い更新したが変化なし) なお、[Internet Explorer]では作動できます。 Windows xp 環境は Internet Explorer7です。

  • プッシュ型情報サービスのデータを取り出すには?

    相撲協会の取り組み結果のようなプッシュ型情報サービスのデータを javaで取り出すようにするにはどのようにすればよいのでしょうか? 相撲協会 http://sumo.goo.ne.jp/hon_basho/index.html JavaのSOCKET機能を使って、Webサーバのソースをこちらからの要求で 取得することは以下のリンクのコードを使って出来ました。 http://ash.jp/java/java_http.htm

    • ベストアンサー
    • Java
  • ソケットでのデータ送受信について教えてください

    はじめまして。 Perlでのソケット通信プログラムで質問があります。 現在ソケットで通信を行うテストプログラムを作っているのですが、 クライアントからサーバへの片方向送信は出来るのですが、 クライアントからデータ受信後、サーバからクライアントへ応答を 返す処理が上手くいきません。 私としては、クライアントとサーバの処理を逆にすればよいだけかな と思っているのですが認識違いでしょうか? 宜しくお願いします。 環境 OS:Linux 言語:Perl5.8 ■上手くいく場合(かなり省略します。ポイントだけ) サーバ側 $client=accept(C_SOCKET, P_SOCKET); while(<C_SOCKET>){ printf("%s",$_); #受信データ } クライアント側 socket (SOCKET, PF_INET, SOCK_STREAM, 0); connect(SOCKET, pack_sockaddr_in(9000,$ipaddr_bin)); print SOCKET "Test Data!!\n"; →サーバ側端末にTest Data!!と表示 ■送受信しようとしてダメなもの サーバ側 $client=accept(C_SOCKET, P_SOCKET); while(<C_SOCKET>){ printf("%s",$_); #受信データ } print C_SOCKET "Return Data!!\n"; クライアント側 socket (SOCKET, PF_INET, SOCK_STREAM, 0); connect(SOCKET, pack_sockaddr_in(9000,$ipaddr_bin)); print SOCKET "Test Data!!\n"; while(<SOCKET>){ printf("%s",$_); #応答データ } →サーバ側にはTest Data!!すら表示されない。  もちろんクライアント側にも。

    • ベストアンサー
    • Perl
  • Java7 verup21にアップデート後動作せず

    Javaのアップデートを行うとバージョン確認のサイトでエラーになるようになりました。 どなたか対処方法を教えて下さい。 ■パソコン環境 ・Windows Visata Home Premium Service Pack2 (32bit) ■ブラウザーバージョン ・IE9: 9.0.8112.16421 ・Chrome: 26.0.1410.64m ・FireFox: 20.0.1 ■症状 1)定期的に表示されるJavaのアップデートメッセージに従い、アップデートを実施し最新(Java7 update21)に更新。 2)Javaのサイトのバージョン確認「Javaの有無のチェック」ページで無反応となる。 3)3つのブラウザーを使用しているがすべてにおいて、エラーとなる。   具体的には以下の挙動を示しています。  ◆IE9の場合: 少し待っていると「java.comは応答していません」というメッセージがブラウザーの下方に現れ、さらに待つと 「次のプラグインは応答していません:Java(TM) Platform SE 7 U21 強制終了しますか?」 のメッセージが出ます。  ◆Chromeの場合: しばらく待っていると、 「次のプラグインは応答していません:Java(TM) Platform SE 7 U21 強制終了しますか?」 のメッセージが出ます。  ◆FireFoxの場合: 全くの無反応です。 ブラウザー下段に「www.java.comの応答を待っています」のままで反応が有りません。 しょうがなくブラウザーを閉じ再度起動させると、 「Firefoxは起動していますが応答しません。新しいウィンドを開くにはまず既存のFirefoxプロセスを終了させるかコンピューターを再起動させなければなりません」 のメッセージが出現します。 ■行ったこと ・Java7 update21をアンインストールして再度インストールしても状況は変わりません。 ・JavaのバージョンをJava6 update45をインストールすると問題なく動作するようになります。 とりあえず現状はJava6 update45を使用している状況です。

  • ipod touch ゲームのセーブデータを移動?

    ipod touch で遊んでいるゲームのセーブデータを他のipod touchに移す方法はありますか? 現在使用しているipod touch(2世代)でプレイしているゲーム(スクエニの「FF3」)があります。 それを後々、新しいipod touch(4世代) でプレイをしたいのですが、 途中まで進んだデータをそのまま他のipod touchにうつす方法はあるのでしょうか?

  • データが消えたiTunesとの同期

    iTunesとの同期に関してなんですが 私は弟との共同でパソコンを使ってます iTunesも共同で自分の曲はフォルダ分けをしてそのフォルダだけを同期してました 何ヶ月か前にiTunes起動中にiTunesがフリーズしてしまい動かせないのでパソコンのスタートで再起動しました そしたらiTunesのデータが全て消えてしまいました(^_^;) それでiPod touchに入れていた動画や曲の一部は弟との共同ということもあり 容量をあまり使いたくないと思ってたのでiTunesに入れてiPod touchと同期したら削除してました ゴミ箱に入ったデータも消してしまいました その消してしまったデータはかなり多くてその分をまた入れるには結構な時間がかかるのでまた入れ直すのはちょっとめんどうで... 聞きたいことはiPod touchと同期して新しい曲や動画を入れたとき再起動したときに消えてしまったデータも含め消してしまったデータは消えてしまいますか? iPod touchに新しく入れた曲や動画だけしか残らなくなりますか? 消えてしまったiTunesの曲や動画が入ったままで消えないで新しい曲や動画を入れられる方法はありますか? 説明が下手で申し訳ありません iPod touchのデータも消えてしまうのが嫌で前に使っていたiPhone3GSと今使ってるiPhone4SにiTunesのデータが消えてしまったあとに入れた動画や音楽を入れてiPod touchがわりにしてますが曲はiPod touchに入れたいんです この曲を聞くためにiPod touchやiPhoneを起動し直したりヘッドホンを繋げ直したりするのが億劫になってきたのでどなたかわかる人がいたら回答お願いします。

専門家に質問してみよう