• ベストアンサー

java socketエラーについて

javaでソケット接続するプログラムを作成しています。ソケット接続の以下のエラーがたまに発生するのですが、このエラーが出た際、回避方法がわかりません。どのようにしたら再度ソケット接続を行なえるのでしょうか? 以下エラー内容です。 java.net.ConnectException: failed to connect to /192.168.10.12 (port 50000): connect failed: ENOBUFS (No buffer space available) お詳しい方、よろしくお願いします!

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

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

  • ベストアンサー
  • KSOH
  • ベストアンサー率93% (29/31)
回答No.1

コネクション確立のためのシステムリソース(バッファ)が足りませんというエラーだと思いますが、アプリケーションの中でSoketをopenしっぱなしで放置しているといったことはないでしょうか?

ojinnjinn
質問者

補足

ご回答ありがとうございます!socketはshutdownOutputを毎度行いますが、これだとinput側は生き続けてることになって半分open状態ってことになる?のでしょうか。。だとすると、システムリソースを食い続けてる事になっていそうです。 また、更に疑問がわいてきました。socketを毎回closeするようにすれば、その時点でシステムリソースは開放されるのでしょうか? また、一度closeしたsocketインスタンスは接続しようとすると isclosed 状態が返って来て接続できません。 一度closeしたソケットインスタンスは再利用はできないのでしょうか?

関連するQ&A

  • androidのSocketでの正常なリソース解放

    お世話になります、androidでsocket通信を行なうプログラム(Wifi経由)を作成しておりますが、周期的に何度も接続、通信、切断をくりかえしておりますと、ソケットの.connectをするところで以下のエラーが出ます。 java.net.ConnectException: failed to connect to /192.168.10.12 (port 50000): connect failed: ENOBUFS (No buffer space available) 周期動作としては、 ソケットの接続後、受信待ち状態はスレッド内でソケットのInputStreamの.read()で行い(読み取ることができるまでブロックされるメソッド)、送信は、別のスレッドを起こしてソケットのOutputStreamでのflush()で送信しています。ある周期的タイミングで切断の手順を踏みます。 エラーの内容からして、切断するメソッド発行時にちゃんとリソースが解放されていない?のではないかと考えます。今、私がソケットを閉じよとする際に発行しているメソッドは以下になります(順同) (1)ソケットのOutputStream.close (2)ソケットのInputStream.close (3)ソケット.close 正常にソケット回りのリソースを解放する手順としてソケットの閉じる方法は間違っていますでしょうか? ちなみに、このエラーが出た後はインターネットへの接続も不可状態になり、端末を再起動しないと復帰しません。 大変困っております、お詳しい方おられましたら、よろしくお願いします。

  • 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

  • WebLogic Server でのエラー

    質問です。下記の環境で以下を実行し、 WebLogic Server インスタンス情報取得コマンドでエラーが発覚し 原因が特定できず困っております。 どなたか何かよいアドバイス等いただければ幸いです。 宜しくお願いします。 ■環境 Solaris 9 JDK1.3.1_08 Weblogic Server7.0 SP4 /opt/bea/jdk131_08/bin/java weblogic.Admin -url localhost:7001 -username system -password weblogic GETSTATE slserver Failed to connect to t3://localhost:7001 due to:[javax.naming.CommunicationException [Root exception is java.net.ConnectException: t3://localhost:7001: Destination unreachable; nested exception is: java.net.ConnectException: Connection refused; No available router to destination]]

  • Android Socket.connectエラー

    Androidでソケット通信するプログラムを作っています。 PC側がソケットサーバーをたてて(accept)、 Android側でクライアントとして接続(connect)するようにしています。 connectを実行している部分のソースは以下のようにしています。 ----------------- String ip = "192.168.XX.XX"; <-PCのIPアドレス int port = 9999; socket = new Socket(); InetSocketAddress addr = new InetSocketAddress(ip, port); try{ socket.connect(addr); return true; }catch(IOException e){ e.printStackTrace(); return false; } ------------------ 上記やり方でまずはエミュレータで試したところうまく行きました、その後 実機に入れて同じように実行したところconnectのところで例外が飛んできます。 メッセージは"no route to host"でした。 実は全く同じソースで以前は実機でもできていたはずなんですが、 最近試したところできなくなっているようでした。 Android端末はXperia Arcですが、OSを2.3.4にバージョンアップしたことくらいで 以前と特に変わったところはないと思うのですが 原因として何が考えられるでしょうか? よろしくおねがいします。

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

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

  • javaを使ってメールがしたい

    JAVAを使えば、Outlookを使わなくても、メールを送付できると書いてあったのですが nested exception is: class javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25; というエラーが出て送付できません。 JavaMailの環境は何とか用意できたのですが送ることができません。 いったいどうすればよいのでしょうか? なお、コードは、下記のコピーです。 http://www.hellohiro.com/src/HelloWorldJavaMail.java 宜しくお願い致します。

    • ベストアンサー
    • Java
  • vnc javaアプレットのエラー

    自宅のコンピュータをVNCを使って遠隔操作しようと考えています。 http://url:5800で入るとパスワードを要求。 パスワードを入れると Java.net. ConnectException: Connection refused :connect というエラーが出ます。 ルータでは、5800ポートを開いています。 どのように解決すればいいのかご存知の方がいましたら教えてください。よろしくお願いします。

  • DBD::Mysql が使用する標準のsocketはどこから得ているか?

    以下のようなスクリプトで、以下のようなエラーになっています。 port(socket)を指定しているにもかかわらず使用されない理由も分からないのですが、エラーメッセージのsocketはどこで設定されているのでしょうか? /etc/my.cnf で /tmp/mysql.sock を指定し、サーバーとクライアントは問題なく通信できています。 よろしくお願いします。 ■perlスクリプト ---------------------------------------- #!/usr/local/bin/perl use DBI; $user = 'usr'; $passwd = 'password'; $ds = 'DBI:mysql:db_name;host=localhost;port=/tmp/mysql.sock'; $db = DBI->connect($ds, $user, $passwd); (以下略) ■perlスクリプトのエラー ---------------------------------------- $ ./script_name.pl DBI connect('db_name;host=localhost;port=/tmp/mysql.sock','root',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at ./script_name.pl line 9 ■環境 ---------------------------------------- mysql:バイナリの(rpmでないやつ)4.0.24-standard OS:Linux 2.4.20-31.9(REDHAT) DBD:DBD-mysql-2.9004

    • ベストアンサー
    • Perl
  • mySQLでエラーが出ます。

    MySQLをインストールしたんですが、本に書いてある通りやるとエラーが出ます。 まず、DOS画面に「winmysqladmin.exe」と入力します。 それから、「mysqladmin ping」と入力します。普通は、「mysql is alive」 と返ってくるらしいんですが、私は以下のように返ってきます。 mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to MySQL server on 'localhost' (10061)' Check that mysqld is running on localhost and that the port is 3306. You can check this by doing 'telnet localhost 3306' そこで、「telnet localhost 3306」を入力すると、以下のエラーが出ます。 D:\mysql\bin>telnet localhost 3306 接続中: localhost...ホストへ接続できませんでした。 ポート番号 3306. 対象のコンピュータによって拒否されたため、接続できませんでした。 誰か原因のわかりそうな方は、ご回答ください。よろしくお願いします。ちなみに関係あるかどうか分かりませんが、Cドライブにインストールしていたときは、できました。Cドライブが使えなくなってしまったんで、Dドライブにインストールしました。

  • メールのエラーについて

    http://syokunin.no-ip.org/setumei/cart_setumei.htm 上記サイトでWebカートのPHPをインストールして自分のホームページに設定したいと思っています。 以下のエラーなのですが、メールの設定をしていないからですよね。。 なにぶんPHPは初心者の為、どこに設定すればよいのかわかりません。 どなたかご教授お願い致します。 環境:xamppを一括インストール    なので、Webサーバはapacheです。 Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\apachefriends\xampp\htdocs\web_cart\cart.php on line 767

    • ベストアンサー
    • PHP

専門家に質問してみよう