• 締切済み

ソケット通信で

ServerSocketのaccept()で接続を受け付けるときに、 指定したIPアドレスからの接続を拒否することはできますか? このメソッドの説明に 新しいソケット s が作成され、セキュリティマネージャが存在する場合、セキュリティマネージャの checkAccept メソッドが、引数として s.getInetAddress().getHostAddress() および s.getPort() を指定して呼び出され、この操作の実行が許可されていることを確認します。と あるんですがどこでアクセス拒否を設定したらいいのかわかりません。

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

みんなの回答

  • covachan
  • ベストアンサー率38% (46/120)
回答No.1

結論を言えばjava.policyファイルにSocketPermissionを登録します。 参考URLを見てください。

参考URL:
http://ranha.kerox.info/HowToEditJavaPolicy.html

関連するQ&A

  • 相手のIPアドレスを知る手段

    C言語で、サーバーソケット(accept)でコネクションを確立した後、 接続された相手のIPアドレスを知る手段はありますでしょうか。 Javaでは、java.net.ServerSocketクラスの、getInetAddressという メソッドを利用して知ることができるのですが、C言語ではどうして いいのか分かりません。ご存知の方ご教授よろしくお願いします。

  • JAVAのソケット通信の接続数について

    JAVAのソケット通信の接続数について ServerSocket server= new ServerSocket( port ); server.setSoTimeout( 4000 ); Socket socket = server.accept();//クライアントからの接続をまつ 以上のコードを使っていますが、クライアントからの接続数を調べる方法はないでしょうか?

    • ベストアンサー
    • Java
  • ソケットにおけるメッセージの送受信について

    いつもお世話になっています。 ソケットに関して質問します。 下記の手順でソケットを使用したいと考えています。 クラスAとクラスBが存在する。 1)クラスA:ソケット通信でメッセージ送信 2)クラスB:ソケット通信によるメッセージを取得 3)クラスB:ソケット通信で返信する 4)クラスA:ソケットによるメッセージを再取得する このとき、クラスAがクラスBによるメッセージ再信が、30秒以内にこなければ、ソケットを閉じる それにあたってソースを1クラスで実行できるよう書き変えたいのですが、どうも上手くいきません。 実行したいメソッド手順が ソケットを開く openSocket ソケットにメッセージ送信 sendMsg ・・・1と3はこのメソッドを使用 メッセージ取得 getMsg ・・・2と4はこのメソッドを使用 ソケットを閉じる closeSocket の順です。 自分で一度考えてみたソースは以下です。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class Messaneger{ private Socket socket; private BufferedReader in; // ソケットを開く public void openSocket() { ServerSocket serverSocket; try { serverSocket = new ServerSocket(5555); System.out.println("クライアントからの接続をポート5555で待ちます"); // クライアントからの接続を待ちます Socket socket = serverSocket.accept(); System.out.println(socket.getInetAddress() + "から接続を受付ました"); // 出力ストリームを取得 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 入力ストリームを取得 in = new BufferedReader( new InputStreamReader( socket.getInputStream())); } catch (IOException e) {} } //ソケットを閉じる public void closeSocket() { try { socket.close(); } catch (IOException e) {} } /** * ソケット通信でメッセージを送信 * @param 送信するメッセージ */ public void setMsg(String sendMsg) { try { socket = new Socket("localhost", 5555); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 入力ストリームを取得 in = new BufferedReader( new InputStreamReader( socket.getInputStream())); //サーバーにメッセージ送信 out.println( sendMsg ); //送信メッセージdata System.out.println(sendMsg); } catch (IOException e) {} } /** * ソケット通信でメッセージを取得 * @return msg サーバーに渡されたメッセージ */ public String getMsg() { String getMsg = ""; BufferedReader in; try { in = new BufferedReader( new InputStreamReader( socket.getInputStream())); System.out.println(in.readLine()); } catch (IOException e) {} return getMsg; } } 参考URL:http://www.hellohiro.com/socket.htm 宜しくお願いします。

  • ソケット通信

    現在プロセス間通信について学んでおり、 今はソケットを使ったプロセス間通信のプログラムを書いています。 そのソケット通信での質問なのですが、 2台のパソコンでINETドメインのソケットを使って プログラムを書いているのですが、 サーバーを実行した後、 別のパソコンでサーバー側のパソコンのIPアドレスを指定して クライアントを実行しようとすると、 connect:Connection timedout と表示されて実行できません。 同じプログラムをUNIXドメインで 1台のパソコンで実行すると正しく実行できます。 これは、プログラムに問題があるのでしょうか? それとも、ソケット通信を行う際には 何かパソコン等の設定が必要なのでしょうか? 教えてください。お願いします。 あと、セマフォを用いたプロセス間通信のサンプルプログラムが のっているホームページなどご存知でしたら、 教えていただけるとありがたいです。

  • 初歩的なソケット通信(java)

    初歩的なソケット通信(java) javaのソケット通信プログラムについて質問させて頂きます。まだまだ基礎の段階なのですが、詰まってしまたので、良かったら教えてください。 以下プログラムコード ------------------------------------- //サーバー側 import java.net.*; import java.io.*; public class Server { static int port = 12345; public static void main(String[] args) { try{ //サーバソケットの作成 ServerSocket ssoc = new ServerSocket(port); //メインループ while(true){ try{ System.out.println("クライアントからの接続を"+ port +"で待ちます"); Socket soc = ssoc.accept(); System.out.println(soc.getInetAddress().getHostName()+"から接続を受けました"); //処理をスレッドに任せます new Connect(soc); }catch(IOException e1){ e1.printStackTrace(); } } }catch(IOException e2){ e2.printStackTrace(); } } } class Connect extends Thread{ private Socket socket = null; public Connect(Socket socket){ this.socket = socket; //スレッド開始 this.start(); } public void run(){ try{ //出力ストリームを取得 OutputStream os = socket.getOutputStream(); PrintWriter out = new PrintWriter(os,true); //入力ストリームを取得 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader in = new BufferedReader(isr); String inputLine; while((inputLine = in.readLine()) != null){ //System.out.println(inputLine); out.println(inputLine); } System.out.println("処理が終わったので接続を切ります"); in.close(); out.close(); socket.close(); }catch(Exception e1){ try{ socket.close(); }catch(Exception e2){ e2.printStackTrace(); } } } }

  • ソケットAPI について

    ソケット通信を勉強するために、PC1台での簡単なクライアント・サーバー型のネットワークシステムを作成したいのですが、 1:クライアントの実行ファイル起動、connect()後にクライアントのIPアドレス、ポート番号を標準出力したいのですが、どうすればよいでしょうか?  connect()関数で宛先のIPアドレス、Portは第2引数であたえると思うのですが、  調べたところ、接続元のIPアドレス、Portは自動的にバインドされているとか・・。  では、そのバインドされている物?構造体から引用すればいいのかな・・と素人的な考えでしょうか? 2:socket()作成時のdomain引数には、AF_INETにしなければならないでしょうか?  PC1台でサーバ、クライアント実行ファイルの両方を起動させますが、通信では、一度LANポートからローカルエリアへ出て戻ってくるだけなら、AF_LOCALでも良いのでしょうか?  AF_INETのdomain引数で、ネット上へ出て戻ってこれるのでしょうか?  (ネットに出るなら、セキュリティ的に怖い気もするのですが・・) まだ、C言語を勉強し始めて4ヶ月程度です。 宜しくお願い致します。 PC環境 Windows XP cygwin上にてgccコンパイル、実行ファイル起動

  • 匿名クラス内のメソッドをオーバーライド。実引数はいつどこから来るのでしょうか?

     お世話になっております。 匿名クラス内のメソッドをオーバーライドするときの引数についての質問なのですが File d = new File("F:\\dir"); File[] d2 = d.listFiles(new FileFilter(){ public boolean accept(File hoge){ return hoge.toString().endsWith(".txt"); } } ); オーバーライドしたacceptメソッドの仮引数のFile型のhogeがありますが このacceptメソッドの実引数はいつどこから来るのでしょうか? このacceptメソッドの実引数はどこで「acceptメソッドの呼び出し」で指定すればよいでしょうか? その他ActionEvent e などの仮引数も謎です。 どうかよろしくご指導お願いいたします。

    • ベストアンサー
    • Java
  • ソケット通信(サーバ側)について

    環境:Windows2000とWindows2000(サーバに見立てて) WinScok2にてサーバソケットAPを作ったのですが、 クライアントからの接続でタイムアウトエラーになります。 以前にPC側APとサーバAPでポートが同じでなければいけないと言われ修正したのですが、まだ接続できません。 以前の方にも言われたのですが、サーバAPを起動後にプロンプトからtelnet (リスンされたIP) (ポート番号)で起動すると、接続に失敗しました。とメッセージが表示されます。 サーバAPはaccept()で待っている状態です。 何か洩れている箇所があるのでしょか?

  • VC++でのソケット通信について

    いつも拝見させていただいております。 このたびは、皆様のお知恵をお借りしたく質問させていただきました。 ソケット通信を行いたく、以下のサンプルを作成いたしました。 この関数を5回ループさせると、エラーが起きてしまいます。 エラーコードは10061です。 解決方法をご存知の型が降りましたら、 ご教授ください。 よろしくお願いいたします。 (VC++での開発です) extern "C" __declspec( dllexport ) bool __stdcall ssl_SockOpen(LPSTR p_c_IpAddress, LPSTR p_c_PortNum) { struct sockaddr_in addr; //socketの情報を代入する構造体 WSADATA p_obj_SockInit; //Windows Sockets初期化変数 //■ Windows Socketsを初期化する WSAStartup( 0x0101, &p_obj_SockInit ); //■ ソケット確保 if( (g_obj_Socket = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ){ pMsg = "ソケットの確保に失敗しました。"; return false; } //■ ソケットの情報を入れる memset( &addr, 0, sizeof( addr ) ); //構造体addrの初期化 addr.sin_family = AF_INET; //AF_INETを指定 addr.sin_port = htons( atoi( p_c_PortNum ) ); //ポートを指定 addr.sin_addr.s_addr = inet_addr( p_c_IpAddress ); //inet_addr()により指定されたIPを構造体に代入 //■ 接続要求を行う▼▼▼▼ここでエラー!!▼▼▼▼ if( connect( g_obj_Socket, (struct sockaddr *)&addr, sizeof(addr) ) < 0 ){ pMsg = "接続要求に失敗しました。"; int i; i = GetLastError( ); return false; } return( true ); }

  • TCP/IP通信OCXのアウトラインを教えてください)

    Cの知識はありますが、 Windows開発は今回がはじめてです。 VC++6.0でTPC/IP通信を行うOCXを作成し、 クライアント(VB6.0で作成)から呼び出そうとしています。 TCP/IP通信のc/sサンプルプログラムはいくつかみましたが、 その機能をOCXの形にしたいときどう考えたらよいか アウトラインを教えていただけないでしょうか? わたしなりには以下のように考えました。 通信用のクラスを作成し、 メンバ変数(private)として ・サーバIP ・ポート番号 ・ソケットハンドル などを用意。 メッソッドとして ・接続(ソケット初期化~接続まで) ・送受信(ループ処理?) ・切断(シャットダウン~クリーンアップまで) イベントとして ・??? イベントとメソッドに何を用意すべきか (呼ぶべき関数と手順はわかるのですが、 メソッドとすべき単位がわかりません)と OCXから非同期モード設定関数(WSAAsyncSelect()) をよぶときの第2パラメタ(HWND)に 何をセットすべきかがわかりません。