2011-08-11 12 views
0

私はアンドロイドソケットプログラミングを行っています。しかし、私はいくつかの送信を取得し、問題を受け取ります。助けてください。私はAndroidソケットプログラミング

Socket socket = new Socket(dstName,dstPort);   
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true); 
printWriter.println(method); 

の下に使用している場合はそれがサーバーにメッセージを送信することができますAndroidのクライアント

サーバー:私はそれは、Visual Studio C++ クライアントを使用して実行します。ただし、 OutputStreamWriterを使用しているとき、サーバーに送信できません。

質問1: OutputStreamWriterとPrintWriterの違いは何ですか?

一方、私はUDPソケットを作るつもりです。だから、私はDatagramSocketを使用しています

DatagramSocket udpSocket = new DatagramSocket(); 
byte[]outBuf = "this is a text".getBytes(); 
DatagramPacket dataPacket = new DatagramPacket(outBuf, outBuf.length); 
dataPacket.setAddress(InetAddress.getByName(dstName)); 
dataPacket.setPort(dstPort); 
dataPacket.setLength(outBuf.length); 
udpSocket.send(dataPacket); 

また、サーバーに到達することはできません。

質問2: なぜDatagramSocketとOutputStreamWriterがローカルサーバーにデータを送信できないのですか?ソケット付きのprintWriterだけがそれにアクセスできますか?

感謝

答えて

0

サーバーがメッセージごとに新しい行を期待しているように思えます。 PrintWriter.println()は名前を含めると1つを送信します。 OutputStreamWriterでは、改行を明示的に送信する必要があります。

+0

私はもう一度新しい行を送信してからフラッシュするようにテストしました。結果は同じです。だから、私はそれが改行に関連しているとは思わない。 – Ian

0

このクラスを使用して接続します。ソケットを返します。

public class ChatApplication extends Application { 

    private Socket mSocket; 
    { 
     try { 
      mSocket = IO.socket(Constants.CHAT_SERVER_URL); 
     } catch (URISyntaxException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    public Socket getSocket() { 
     return mSocket; 
    } 
} 
0

出力ストリームは、Writerが文字ストリームの場合はバイトストリームです。 Writerを使用して、エンコーディングスタイルを制御できます。

PrintWriter wrtr = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));