質問編集履歴

1 コードを追加しました

luna12

luna12 score 37

2017/01/13 18:30  投稿

javaでのTCP/IP通信について
###前提・実現したいこと
javaでTCP/IPを使って通信するためのプログラムを作りたいです
受信する側(サーバー側?)のプログラムは一応接続待ちになるところまでは動かせたのですが、
クライアント側?のほうの接続をしようとするところで問題のエラーが出てしまっています
一応IPやポートを変えて試してはみたのですが、同じエラーメッセージでした
ちなみに現在設定しているポートは10000で試してみました
が、endpoint(SocketAddress)の中身をみてみるとメンバのportの値が9999になってたり、hostnameの値もnullが入ってたりで…
他に何か考えられそうな問題点を指摘していただけるとありがたいです。。
###発生している問題・エラーメッセージ
```
Exception in thread "main" java.net.ConnectException: Connection refused: connect
   at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
   at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
   at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
   at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
   at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
   at java.net.PlainSocketImpl.connect(Unknown Source)
   at java.net.SocksSocketImpl.connect(Unknown Source)
   at java.net.Socket.connect(Unknown Source)
   at adaputa_dummy.dummy.trans(dummy.java:162)
   at adaputa_dummy.dummy.main(dummy.java:53)
```
###該当のソースコード
###クライアントプログラム
```java
//dummy.java
       String server = "localhost";
       int port = Integer.parseInt(conf.getProperty("trans_port")); // サーバー側のポート番号
       SocketAddress endpoint= new InetSocketAddress(server, port);
       Socket s = new Socket();
       ★s.connect(endpoint, 2000);
       // サーバーに数値を送信
       OutputStream os = s.getOutputStream();
       DataOutputStream dos = new DataOutputStream(os);
//以下略
```
###サーバープログラム  
```  
   /**  
    * コンストラクタ  
    * @throws IOException  
    */  
   public TransDummy() throws IOException {  
       String file="./conf/conf.properties";  
       conf = new Properties();  
       conf.load(new FileInputStream(file));  
 
       ss = new ServerSocket(Integer.parseInt(conf.getProperty("trans_port")));  
 
       //接続待ち  
       for(;;){  
           connect();  
       }  
   }  
 
   /**  
    * との接続を行う  
    * @throws IOException  
    */  
   private void connect() throws IOException{  
       logger.info("Connection開始");  
       //ここでとまって接続待ち状態になります  
       ★s = ss.accept();  
       InputStream is = s.getInputStream();  
       DataInputStream input = new DataInputStream(is);  
       byte[] msg = new byte[12];  
       input.read(msg, 0, 12);  
 
       //受信メッセージ内容確認  
       System.out.println("受信メッセージ内容:");  
       for(int i = 0; i< msg.length; i++){  
           System.out.print(Integer.toHexString(msg[i] & 0xff) + " ");  
       }  
       System.out.println();  
 
       //受信メッセージの長さだけチェック  
       if(msg.length == 12){  
//メッセージを受信した場合の処理です  
           response(Integer.parseInt(conf.getProperty("trans_response")), msg);  
       } else{  
           logger.warning("受信データエラー");  
           System.exit(1);  
       }  
 
       logger.info("Connection終了");  
   }  
```  
 
###試したこと
色々通信の設定を変えて試してみたり、
他にはコンパネ→システムとセキュリティ→Windowsファイアウォールによるアプリケーションの許可→リモートデスクトップの許可にチェックをいれてみたり。。(ポートの解放?)
  • Java

    18623 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • TCP

    233 questions

    TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

  • ネットワーク

    816 questions

    ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る