- PR -

javaによるsocket通信について

1
投稿者投稿内容
kashi
会議室デビュー日: 2008/04/07
投稿数: 2
投稿日時: 2008-04-07 01:22
下記のプログラムを使ってクライアントサーバープログラムを勉強しています。

クライアントにはtelnetコマンドを使い、サーバプログラムの動作を確認しました。
結果、1台のパソコンで行うと通信できるのですが、2台のパソコンを使い、別の場所(別のIP)からtelnetでアクセスすると、通信が遮断されます。
そこでファイヤーフォールが邪魔をしているのかと思い、ファイヤーフォールを切ってみたのですが、変わらず遮断されました。

どうすれば、他のパソコンとの通信ができるようになるのでしょうか?
初歩的な質問かもしれませんがよろしくお願いします。


import java.net.*;
import java.io.*;

public class HelloWorldSocketServer {
public static void main(String[] args) {
try{
ServerSocket serverSocket = new ServerSocket(5555);
System.out.println("クライアントからの接続をポート5555で待ちます");
Socket socket = serverSocket.accept();
System.out.println(socket.getInetAddress() + "から接続を受付ました");
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));

String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
}
System.out.println("処理が終了したので接続を切ります");
out.close();
in.close();
socket.close();
serverSocket.close();
} catch(IOException e){
e.printStackTrace();
}
}
}
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-04-07 09:39
> Socket socket = serverSocket.accept();
この直後にsocketをコンストラクタ引数として渡すスレッドをnewし、startし、そのスレッドのrun()メソッドの中で必要なI/Oを行なってください。このようなやり方で、複数クライアントの同時接続を扱います。


[ メッセージ編集済み 編集者: ranco 編集日時 2008-04-07 09:40 ]
kuma
大ベテラン
会議室デビュー日: 2004/02/25
投稿数: 110
投稿日時: 2008-04-07 10:41
JavaでHello World ソケット編を参考にしているみたいなので下まで全部読みましょう。
kashi
会議室デビュー日: 2008/04/07
投稿数: 2
投稿日時: 2008-04-07 16:40
rancoさん、kumaさん返信、本当にありがとうございます

複数クライアント接続もできればしたいのですが、今回は練習なので1度きり1台だけの通信にしようかと思ってます。

実行方法を書いておきます。
1.パソコンA(IP:xxx.xxx.xxx.xxx)のdosでサーバプログラムの起動
2.パソコンB(IP:yyy.yyy.yyy.yyy)がdosで『telnet xxx.xxx.xxx.xxx 5555』とうちアクセスする
3.パソコンAがパソコンBの接続を受け『yyy.yyy.yyy.yyyから接続を受付ました』と表示
4.通信が終わるとパソコンAのサーバー処理が終わる

上記の方法で不自然な点、勘違いしているなと思う点があれば是非返信お願いします
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-04-07 18:39
パソコンAのファイアウォールの他に、ポートを監視しているアプリは何もないんでしょうか?
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2008-04-07 19:11
1:1の通信だけでスレッドによる複数クライアント処理はしなくていい。
だけど、別の場所のパソコンからだと1:1にも関わらず「遮断」されてしまう。
ということでしょうか?

「遮断」とはなにをもってそう言われてるのでしょう?

接続がうまくいかないときのクライアント、サーバ両方でのnetstat -aの状態は
どうなってるでしょう?

ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-04-07 19:58
そうか…
Bでサーバ動かしてAからアクセスすると、どうなる?
(もちろんBさんはファイアウォールoffで)
1

スキルアップ/キャリアアップ(JOB@IT)