- PR -

jdk1.3.1_10でのSocket通信

1
投稿者投稿内容
ノムラ
会議室デビュー日: 2005/11/10
投稿数: 8
投稿日時: 2005-11-10 21:34
はじめまして、
現在どうしてもjdk1.3にてSocket通信を行わなければならなくて、
行き詰まってしまいました。
出来れば先輩方のお知恵を拝借したく、投稿いたしました。

ソースとしては以下の様な感じです。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class test {
public final static String DEBUG_ADDRESS = "192.168.1.1";
public final static int DEBUG_PORT = 5000;
public final static int DEBUG_TIMEOUT = 4000;
public final static int SUCCESS = 0;
public final static int FATAL = -1;

protected Socket m_socket = null;

protected DataOutputStream m_out = null;
protected DataInputStream m_in = null;

public static void main( String[] args )
{
try {
test bbSandSocket = new test( );
bbSandSocket.connect( DEBUG_ADDRESS, DEBUG_PORT, DEBUG_TIMEOUT );
int[] iBuffer = new int[ 1024 * 3 ];
for ( int i = 0; i < iBuffer.length; i++ )
{
iBuffer[ i ] = i;
}
iBuffer[ 0 ] = 33;
bbSandSocket.send( iBuffer, iBuffer.length );
// bbSandSocket.recv( );
bbSandSocket.close( );
} catch (Exception e) {
e.printStackTrace();
}
}

public int connect( String sAddress, int iPort, int iTimeOut )
throws Exception
{
int iRet = SUCCESS;
try
{
// ソケットを生成
m_socket = new Socket(sAddress,iPort );
// タイムアウト秒を設定
m_socket.setSoTimeout( iTimeOut );
// 出力ストリームを取得
m_out = new DataOutputStream( new BufferedOutputStream( m_socket.getOutputStream( ) ) );
// サーバからの返答を受け取る
m_in = new DataInputStream( new BufferedInputStream( m_socket.getInputStream( ) ) );
}
catch ( UnknownHostException e )
{
close( );
iRet = FATAL;
throw e;
}
catch ( IOException e )
{
close( );
iRet = FATAL;
throw e;
}
catch ( Exception e )
{
close( );
iRet = FATAL;
throw e;
}
finally
{
}
return iRet;
}

public int send( int[] iBuffer, int iLength ) throws Exception
{
int iRet = SUCCESS;
try
{
if ( null == m_out )
{
iRet = FATAL;
return iRet;
}

int i = 0;
for ( i = 0; i < iBuffer.length; i++ )
{
String s = Integer.toHexString( iBuffer[ i ] ).toUpperCase( );
}

for ( i = 0; i < iLength; i++ )
{
m_out.writeByte( iBuffer[ i ] );
}

m_out.flush( );
}
catch ( IOException e )
{
iRet = FATAL;
throw e;
}
catch ( Exception e )
{
iRet = FATAL;
throw e;
}
finally
{
}

return iRet;
}

public int close( ) throws Exception
{
int iRet = SUCCESS;
try
{
if ( null != m_out )
{
m_out.close( );
m_out = null;
}

if ( null != m_in )
{
m_in.close( );
m_in = null;
}

if ( null != m_socket )
{
m_socket.close( );
m_socket = null;
}

}
catch ( IOException e )
{
iRet = FATAL;
throw e;
}
catch ( Exception e )
{
iRet = FATAL;
throw e;
}
finally
{
}
return iRet;
}

}

Jdk1.4であらかじめ作ってあったサーバ側のモジュールを、
192.168.1.1上で起動し待機している状態で実行いたしますと、
(サーバモジュールはjdk1.4でSocket通信をしていたので問題ないと思います。)
以下の様なExceptionが出てきてしまいます。

java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:350)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:137)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:124)
at java.net.Socket.<init>(Socket.java:268)
at java.net.Socket.<init>(Socket.java:95)
at test.connect(test.java:74)
at test.main(test.java:43)

Exceptionを見る限り、繋がらないといわれているのですが、
pingは通る状態です。
m_socket = new Socket(sAddress,iPort );
の部分でExceptionが発生しているので、
IPアドレスのテキスト表現では動作しないと言う事でしょうか。
通信がIPアドレスで指定できないと少し厳しいのですが、
何とかなりませんでしょうか。

誠に恐縮ですが、アドバイスの程何卒よろしくお願い致します。
ノムラ
会議室デビュー日: 2005/11/10
投稿数: 8
投稿日時: 2005-11-10 21:45
長文失礼いたしました。
自己解決いたしました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-11-10 22:07
せっかくですから何が問題でどのように解決されたか記載してはいかがでしょうか?
同じ事例に遭遇した方がここに辿り着いたときのために。
ノムラ
会議室デビュー日: 2005/11/10
投稿数: 8
投稿日時: 2005-11-11 09:20
>インギ様
アドバイスありがとう御座います。
あまりにも単純なミスだった為自己完結してしまいました。

以下行ったデバッグ手順です

・サーバモジュールを立ち上げる
・telnetで接続を試みる
・反応あり
・上記のモジュールを走らせる
・Exceptionでおちてしまう

この時点が投稿段階でした。
この後以下の作業を行いました。

・上記モジュールに記載されているIP・PORTでtelnetで接続を試みる
・反応無し
・PORTが違う事が判明

と言う誠にもって単純な原因でした。
お騒がせしてすみませんでした。
1

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