- ベストアンサー
TCPプログラミング
次のコードを入力したのですが、コンパイルできません。 エラーについても良く分かりません。 import java.net.*; import java.io.*; public class TCPEchoClient{ public static void main(String[] args)throws IOException{ if((args.length < 2)||(args.length > 3)) throw new IllegalArgumentException("Parameter(s):<Server><Word>[<Port>]"); String server = args[0]; byte[] byteBuffer = args[1].getBytes(); int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7; Socket socket = new Socket(server,servPort); System.out.println("Connected to server...sending echo string"); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); out.write(byteBuffer); int totalBytesRcvd = 0; int bytesRcvd; while(totalBytesRcvd < byteBuffer.length){ if(bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd) == -1) throw new SocketException("Connection closed prematurely"); totalBytesRcvd += bytesRcvd; } System.out.println("Received: " + new String (byteBuffer)); socket.close(); } } これについて、 if(bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd) == -1) この行にエラーがあるらしいです。 どう解決していいのか分かりません。 どなたか説明してもらえませんか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
オリジナルのサンプルコードですと、 if ((bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd)) == -1) ――とread()の戻り値をbytesRcvdに代入する部分を、括弧書きしてます。それを-1と比較してます。 質問のですと、read()の結果を-1と比較し、その比較結果をbytesRcvdに代入するようになりますので、型違反が発生します。 出版時の校正もれでしょうから、出版社に指摘してあげては。 打ち込みに間違えがなければですが。
その他の回答 (2)
えーと f(^^; 最初の「 = 」がどのように作用して、その結果 if の判定結果がどうなるのかが 私には「 ??? 」なのですが・・・(汗)
補足
実はですね、これはオーム社の 「TCP/IPソケットプログラミング」平成15年初版のサンプルコードなんです。 内容を信頼して打ち込んだのですがエラーが出るのでもう何がなんだか(@_@;) Eclipsでdebugすると廃止されている記述方法を使用しているとかなんとか。 でも、初版が去年だし決して古くないのでもう混乱してました。
- yutopapa
- ベストアンサー率47% (139/295)
if(bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd) == -1) のところを、 bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd); if(bytesRcvd == -1) と2行に分ければ、コンパイルは通りますよ。
お礼
回答ありがとうございます。 問題の行は、この2行文を1行に置き換えた表現なんですね。 さっそくコンパイルしてみます。
お礼
回答ありがとうございます。 まさにご指摘の通り、打ち間違いでした。 調べてくれてありがとうございました。