2012-01-19 22 views
0

私は、tcp-ipサーバクライアントのコードを書いています...私が直面している問題は::私のサーバはJavaでポートにリッスンしますそれが見つかったものを単に印刷するだけであることがわかりました。Javaのサーバ、Cのクライアント - データを取得できません

私はJavaのクライアントとCのクライアントを持っています。私のJavaクライアントを使用して文字列 "hello server"を送信すると、サーバはそれを見つけて印刷しますが、Cクライアントがwinsock.hの "send"を使って送信すると、Javaサーバは行にエラーを出します。

 commandFromPortal = inFromClient.readLine(); 

)JavaサーバにおけるTCP-IPポートからデータを取得するためにBuffereaderとreadlineのを使用しているとエラーがある::

  Connection reset 
at java.net.SocketInputStream.read(Unknown Source) 
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) 
at sun.nio.cs.StreamDecoder.implRead(Unknown Source) 
at sun.nio.cs.StreamDecoder.read(Unknown Source) 
at java.io.InputStreamReader.read(Unknown Source) 
at java.io.BufferedReader.fill(Unknown Source) 
at java.io.BufferedReader.readLine(Unknown Source) 
at java.io.BufferedReader.readLine(Unknown Source) 
at org.snmp4j.NOCAlarmManager.Clientnew.run 

私は何をすべき?なにか提案を ??

+0

Cクライアントに関する詳細情報を提供すると、少なくともソケットを開いてデータを送信することができます。 –

+1

関連するコードを投稿すると役立ちます。バッファリングの問題ですか?あなたが改行で送った文字列を終わらせ、後で洗うことを試みてください。 – Kevin

+0

サーバーからソケット読み取りコードを送信してください。 – Perception

答えて

0

透明性を導入するには、ミドルウェアを使用する必要があります。

ミドルウェアフレームワークは、ネットワークとハードウェアの異質性を隠すように設計されています。ほとんどのミドルウェアフレームワークでは、オペレーティングシステムやプログラミング言語の異質性、あるいはその両方が隠されています。
のような少数のCORBAを使用することができました。

+1

冗談ではありませんが、データベースを追加しても、1つ(または2つまたは3つ)、管理システム、および報告用のWebフレームワークなしでは使用できません。そうすれば、より透明性が増します。 –

1

ソケットを閉じる前にソケットがバッファリングされていて、キューに入れられたデータがフラッシュされていない(送信されている)のが聞こえます。改行(\n)を追加したときに動作するということは、これを確認しているようです。したがって、ソケットを閉じる前にソケット上のバッファをフラッシュしなければなりません。私はwinsockで動作しませんが、this websiteからshutdown(sock,SD_SEND)に電話する必要があります(動作しない場合は、ソケットバッファをフラッシュする方法については、winsockのドキュメントを参照してください)。

関連する問題