2012-02-29 2 views
0

Javaサーバーと通信しています。 javaで開発され、ip、port上で動作する1つのアプリケーション。例: 、 JAVAサーバーと.Netクライアントプログラミング

  • データがtrasferredされた後、サーバー
    1. 接続:192.168.1.1ポート9090 ませんwiが私のASP .NET(C#の)私は、次のしている

      シナリオを使用しているサーバーと通信したいですデータ転送が完了したことをサーバーに通知する必要があります。その後、サーバーはデータを処理し、私を元に戻します(respone)。

    2. それから私はそのデータを読む必要があります。

    私はNetworkStreamクラスを使用しています。

    私はデータを送信するために書き込みを使用している1つの方法があります。

    しかし、サーバーは完全なデータが受信されたかどうかを理解していません。 これはデータを継続的に待っています。

    これを行うにはどうすればよいですか?

    +1

    クライアントとサーバーをどのように構築したかを確認するためのコードを私たちに提供していないのであれば、本当に助けになることはありません。 – Dervall

    答えて

    1

    おそらく、その通信にEneter Messaging Frameworkを使用することが考えられます。
    プロセス間通信のための軽量なクロスプラットフォームフレームワークです。

    Javaサービス・コードは次のようになります。

    // Declare your type of request message. 
    public static class MyRequestMsg 
    { 
        public double Number1; 
        public double Number2; 
    } 
    
    // Declare your type of response message. 
    public static class MyResponseMsg 
    { 
        public double Result; 
    } 
    
    
    public static void main(String[] args) throws Exception 
    { 
        // Create receiver that receives MyRequestMsg and 
        // responses MyResponseMsg 
        IDuplexTypedMessagesFactory aReceiverFactory = new DuplexTypedMessagesFactory(); 
        myReceiver = 
         aReceiverFactory.createDuplexTypedMessageReceiver(MyResponseMsg.class, MyRequestMsg.class); 
    
        // Subscribe to handle incoming messages. 
        myReceiver.messageReceived().subscribe(myOnMessageReceived); 
    
        // Create input channel listening to TCP. 
        IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory(); 
        IDuplexInputChannel anInputChannel = 
         aMessaging.createDuplexInputChannel("tcp://127.0.0.1:4502/"); 
    
        // Attach the input channel to the receiver and start the listening. 
        myReceiver.attachDuplexInputChannel(anInputChannel); 
    
        System.out.println("Java service is running. Press ENTER to stop."); 
        new BufferedReader(new InputStreamReader(System.in)).readLine(); 
    
        // Detach the duplex input channel and stop the listening. 
        // Note: it releases the thread listening to messages. 
        myReceiver.detachDuplexInputChannel(); 
    } 
    
    private static void onMessageReceived(Object sender, 
          TypedRequestReceivedEventArgs<MyRequestMsg> e) 
    { 
        // Get the request message. 
        MyRequest aRequest = e.getRequestMessage(); 
    
        ... process the request ... 
    
        // Response back the result. 
        MyResponseMsg aResponseMsg = new MyResponseMsg(); 
        ... set the result in the response message ... 
    
        try 
        { 
         // Send the response message. 
         myReceiver.sendResponseMessage(e.getResponseReceiverId(), aResponseMsg); 
        } 
        catch (Exception err) 
        { 
         EneterTrace.error("Sending the response message failed.", err); 
        } 
    } 
    
    
    // Handler used to subscribe for incoming messages. 
    private static EventHandler<TypedRequestReceivedEventArgs<MyRequestMsg>> myOnMessageReceived 
         = new EventHandler<TypedRequestReceivedEventArgs<MyRequestMsg>>() 
    { 
        @Override 
        public void onEvent(Object sender, TypedRequestReceivedEventArgs<MyRequestMsg> e) 
        { 
         onMessageReceived(sender, e); 
        } 
    }; 
    


    をと.NETクライアントは次のようになります。あなたが見つけることができる

      public class MyRequestMsg 
        { 
         public double Number1 { get; set; } 
         public double Number2 { get; set; } 
        } 
    
        public class MyResponseMsg 
        { 
         public double Result { get; set; } 
        } 
    
    
        private IDuplexTypedMessageSender<MyResponseMsg, MyRequestMsg> myMessageSender; 
    
    
        private void OpenConnection() 
        { 
         // Create message sender. 
         // It sends string and as a response receives also string. 
         IDuplexTypedMessagesFactory aTypedMessagesFactory = new DuplexTypedMessagesFactory(); 
         myMessageSender = 
          aTypedMessagesFactory.CreateDuplexTypedMessageSender<MyResponseMsg, MyRequestMsg>(); 
    
         // Subscribe to receive response messages. 
         myMessageSender.ResponseReceived += OnResponseReceived; 
    
         // Create TCP messaging. 
         IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory(); 
         IDuplexOutputChannel anOutputChannel = 
          aMessaging.CreateDuplexOutputChannel("tcp://127.0.0.1:4502/"); 
    
         // Attach the output channel to the message sender and be able 
         // send messages and receive responses. 
         myMessageSender.AttachDuplexOutputChannel(anOutputChannel); 
        } 
    
        private void CloseConnection(object sender, FormClosedEventArgs e) 
        { 
         // Detach output channel and stop listening to response messages. 
         myMessageSender.DetachDuplexOutputChannel(); 
        } 
    
        private void SendMessage() 
        { 
         // Create message. 
         MyRequestMsg aRequestMessage = new MyRequestMsg(); 
         ... 
    
         // Send message. 
         myMessageSender.SendRequestMessage(aRequestMessage); 
        } 
    
        private void OnResponseReceived(object sender, 
               TypedResponseReceivedEventArgs<MyResponseMsg> e) 
        { 
         // Get the response message. 
         MyResponseMsg aResponse = e.ResponseMessage; 
    
         .... process the response from your Java client .... 
        } 
    


    詳しい技術情報をhere
    Javaのオンラインヘルプはhere、.NETのオンラインヘルプはhereです。

    関連する問題