Javaクライアントに対してC ++ソケットサーバーを実装するにはどうすればよいですか?

私はクライアントサーバーアプリケーションを開発しています。クライアント側はJavaベースで、サーバー側はWindowsではC ++です。

私はソケットと通信しようとしていますが、何か問題があります。

私はクライアントをJavaサーバーと正常に通信して、それが自分のクライアントであるかどうかをテストしましたが、そうでない場合は、C ++バージョンで正しく実行していないようです。

Javaサーバーは次のようになります。

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;


    public class Server {

     public static void main(String[] args){
         boolean again = true;
         String mens;
      ServerSocket serverSocket = null;
      Socket socket = null;
      DataInputStream dataInputStream = null;
      DataOutputStream dataOutputStream = null;

      try {
       serverSocket = new ServerSocket(12321);
       System.out.println("Listening :12321");
      } catch (IOException e) {
      //TODO Auto-generated catch block
       e.printStackTrace();
      }

      while(again){
       try {
           System.out.println("Waiting connection...");
        socket = serverSocket.accept();
        System.out.println("Connected");
        dataInputStream = new DataInputStream(socket.getInputStream());
        dataOutputStream = new DataOutputStream(socket.getOutputStream());
        while (again){
            mens = dataInputStream.readUTF();
            System.out.println("MSG: " + mens);
            if (mens.compareTo("Finish")==0){
                again = false;
            }
        }
       } catch (IOException e) {
           System.out.println("End of connection");
        //e.printStackTrace();
       }
       finally{
        if( socket!= null){
         try {
          socket.close();
         } catch (IOException e) {
         //TODO Auto-generated catch block
          //e.printStackTrace();
         }
        }

        if( dataInputStream!= null){
         try {
          dataInputStream.close();
         } catch (IOException e) {
         //TODO Auto-generated catch block
          e.printStackTrace();
         }
        }

        if( dataOutputStream!= null){
         try {
          dataOutputStream.close();
         } catch (IOException e) {
         //TODO Auto-generated catch block
          e.printStackTrace();
         }
        }
       }
      }
      System.out.println("End of program");
     }
    }

クライアントは単に接続を行い、ユーザーが導入したメッセージを送信します。

あなたは私に似たような働いているサーバーを与えてもらえますか?C ++(Windows)? 私は自分でそれを働かせることはできません。

2
クライアントコードも貼り付け、サーバー側のログからトレースします。
追加された 著者 Sid,
また、シンプルなGoogle検索では、数千ではないにしても何百もの例やチュートリアルがWindowsでソケットサーバーを作り出しています。
追加された 著者 Some programmer dude,

1 答え

あなたの問題は、1文字につき1または2バイトかかるJava文字列を送信していることです( javaの文字列のバイト?

data がクライアント側のデータ文字列であると考えると、ASCIIバイトで送受信する必要があります。

byte[] dataBytes = data.getBytes(Charset.forName("ASCII")); 

for (int lc=0;lc < dataBytes.length ; lc++)
{
    os.writeByte(dataBytes[lc]);
}

byte responseByte = 0;
char response = 0;

responseByte = is.readByte();
response  = (char)responseByte;

os はそれぞれクライアントサイドの DataInputStream DataOutputStream です。

あなたはまた、何が起こっているかを見るためにあなたのTCPトラフィックを盗聴することができます:)

0
追加された
私は、これを見て、おかげで:)
追加された 著者 Alex,