String s="***********\0";

//這裡的\0是因為伺服器端指定發送的消息必須跟著結束符。而直接用println(s)傳送時出現錯誤,因為string 類是沒有'0'結束符的。

 

char[] msg_01=new char[s.length()];

 

msg_01 = s.toCharArray(); //這裡將字串轉換為一個字元陣列,而char是有結束符的。伺服器能接收到正確的消息並給予回應。



//byte[] msg_03=new byte[100];

 

//msg_03=s.getBytes();

 

//將字串轉為位元組陣列,在本機上觀察到的msg_03資料是正確的,但是伺服器端接收的資料並不準確。個人認為可能在資料流程傳輸時出現錯誤,之前看到的demo只有字串和字元陣列的傳送,不知道位元組陣列可不可以。

 

// 創建socket物件,指定伺服器端位址和埠號
//ClientSocket = new Socket(Address, Port);
ClientSocket=new Socket();
ClientSocket.connect(new InetSocketAddress(Address, Port), SOCKET_TIMEOUT);
Isconnect=ClientSocket.isConnected();



//之前不確定通道是否連通,自己加的測試。
if(Isconnect){
mTextView_03.setText("連接成功!");
}
else{ mTextView_03.setText("連接失敗!");}

 

// 獲取 Client 端的輸出流
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(ClientSocket.getOutputStream())), true);
// 填充資訊
out.println(msg_01);
System.out.println("msg=" + s);

 

// 接受資訊
BufferedReader br = new BufferedReader(
new InputStreamReader(ClientSocket.getInputStream()));
String msg_02 = br.readLine();

 

//如果伺服器端發送的資料有加分行符號\n,是可以正常接收的。但是伺服器設置發送的是沒有分行符號的,所以接收資料會出現錯誤,我需要改為一個字元一個字元的接收,沒那麼方便,悲劇~~

 

嗯,後來用的是這樣的方法:

 

//char[] m=new char[100];
// br.read(m);
// String msg_02=new String(m);



if (msg_02 != null) {
mTextView_04.setText(msg_02);
} else {
mTextView_04.setText("資料錯誤!");
}
// 關閉流 和socket
out.close();
br.close();

 

ClientSocket.close();
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()