2011-08-11 98 views
0

我正在做一個android套接字編程。但是,我收到了一些發送和接收問題。請幫忙。Android套接字編程

服務器:我運行它使用Visual Studio C++ 客戶端:Android客戶端

當我用下面

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

它可以將消息發送到服務器。但是, 當我使用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無法將數據發送到本地服務器?只有使用Socket的printWriter可以達到它?

非常感謝

回答

0

好像你的服務器要求每個消息的新線。 PrintWriter.println()發送一個(顧名思義)。使用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

OutputStream是字節流,其中Writer是字符流。 使用Writer我們可以控制編碼風格。

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