2017-01-14 2 views
0

私はソケットクライアント/サーバプログラムを書いています。クライアントはJavaにあり、Cでサーバーされています。 私はサーバーからファイルを読み込みたいと思います。クライアントの フラグメント:ソケットをループで読み取る

while(!(answer = input.readLine()).equals("end")) { 
     System.out.println(answer); 
    } 

サーバー:

char* line; 
size_t len = 0; 
ssize_t read; 
FILE* out; 
while((read = getline(&line, &len, out))!=-1){ 
    write(fd, line, read); 
} 
write(fd, "end", 3); 

は、私は、ファイルからの出力皆ラインに乗るが、それはループから出て行くことはありません。
私は何をしたいですか?
クライアントがサーバの読み取りラインを細かいところから接続すると、それをクライアントに書き込んでください。クライアントはファイルに新しい行を追加できます(他のクライアントが読むでしょう)

どうすれば修正できますか?

答えて

2

C read()は、ストリームの最後にゼロを返します。あなたはそれをテストしていません。

Java readLine()は、ストリームの最後にnullを返します。そのためにはテストしていません。

+0

しかし、私はストリームを終了しません。私はファイルからデータを読んで何かをしたいです – heheszki

+0

私はwrite(fd、 "end"、3)でチェックしようとしていました。しかし、それは動作しません。サーバーループでは終わりですがクライアントでは私は "終わり"を読むことはできません – heheszki

+1

ファイルからデータを読み込み、ストリームの終わりにこれをやり直したいと思います。クライアントでは「終了」を読むことができません。なぜなら、私があなたに与えた理由のために、ファイル読込みループから抜け出ることはないからです。後に何か他のことをすることを止めるものは何もありません。 – EJP

関連する問題