• ベストアンサー

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) この行にエラーがあるらしいです。 どう解決していいのか分かりません。 どなたか説明してもらえませんか。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

オリジナルのサンプルコードですと、 if ((bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd)) == -1) ――とread()の戻り値をbytesRcvdに代入する部分を、括弧書きしてます。それを-1と比較してます。 質問のですと、read()の結果を-1と比較し、その比較結果をbytesRcvdに代入するようになりますので、型違反が発生します。 出版時の校正もれでしょうから、出版社に指摘してあげては。 打ち込みに間違えがなければですが。

参考URL:
http://cs.baylor.edu/~donahoo/practical/JavaSockets/textcode.html
noname#10831
質問者

お礼

回答ありがとうございます。 まさにご指摘の通り、打ち間違いでした。 調べてくれてありがとうございました。

その他の回答 (2)

noname#6829
noname#6829
回答No.2

えーと f(^^; 最初の「 = 」がどのように作用して、その結果 if の判定結果がどうなるのかが 私には「 ??? 」なのですが・・・(汗)

noname#10831
質問者

補足

実はですね、これはオーム社の 「TCP/IPソケットプログラミング」平成15年初版のサンプルコードなんです。 内容を信頼して打ち込んだのですがエラーが出るのでもう何がなんだか(@_@;) Eclipsでdebugすると廃止されている記述方法を使用しているとかなんとか。 でも、初版が去年だし決して古くないのでもう混乱してました。

  • yutopapa
  • ベストアンサー率47% (139/295)
回答No.1

if(bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd) == -1) のところを、 bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd); if(bytesRcvd == -1) と2行に分ければ、コンパイルは通りますよ。

noname#10831
質問者

お礼

回答ありがとうございます。 問題の行は、この2行文を1行に置き換えた表現なんですね。 さっそくコンパイルしてみます。

関連するQ&A