<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[安道生練功房 - Latest posts for "lingerkptor"]]></title>
		<link>https://forum.andowson.com/posts/listByUser/55</link>
		<description><![CDATA[Latest posts for "lingerkptor"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>[網頁程式設計 Web Development] [Android] TextView 即時更新的問題</title>
				<description><![CDATA[ 目前想要做一個良葛格之前有做過的多人聊天的Java程式 
<br>
<br>
目前卡在說傳過來的訊息都是亂碼(不知道為什麼?) 
<br>
<br>
還有不知道怎樣寫關調視窗就結束skt連接的方法(找了一段時間找不到) 
<br>
<br>
以下為我修改良葛格client端的程式碼套用在android上的 
<br>
<pre class="line-numbers"><code class="language-java match-braces"><br>package com.demo.android.chat;<br><br>import java.io.BufferedReader;<br>import java.io.IOException;<br>import java.io.InputStreamReader;<br>import java.io.PrintStream;<br>import java.net.InetAddress;<br>import java.net.Socket;<br><br>import android.os.Handler;<br><br><br>public class ChatClientSocket extends Thread{<br><br>	private Socket skt;        // 客戶端連線Socket物件<br>    private InetAddress host;  // 指定的伺服端IP<br>    private int port;          // 指定的伺服端連接埠<br>    <br>    private BufferedReader theInputStream;<br>    private PrintStream theOutputStream;<br>    private Chat chatBox;<br>	private static String message;<br><br>    <br>	public ChatClientSocket(String ip, int port) {<br>		try {<br>            // 取得伺服端的InetAddress物件、通訊連接埠<br>            host = InetAddress.getByName(ip);<br>            this.port = port;<br>        }<br>        catch (IOException e) {<br>            e.printStackTrace();<br>        }<br>	}<br>	<br>	// 指定這個Socket的訊息觀察者<br>	public void setMessageObserver(Chat box) {<br>		chatBox = box;<br>	}<br><br>	public String getMessage() {<br>		return message;<br>	}<br>	<br>	public void run() {<br>        try {<br>            message = "嘗試連線......";<br>            chatBox.UpdateTextView();<br>            <br> <br>            // 建立Socket物件並嘗試連線<br>            skt = new Socket(host, port);<br>            <br>            message = "連線成功\n";<br>            chatBox.UpdateTextView();        <br><br>            // 從InputStream建立讀取緩衝區<br>            theInputStream = new BufferedReader(<br>                new InputStreamReader(skt.getInputStream()));<br>            // 從OutputStream中建立PrintStream物件<br>            theOutputStream = new PrintStream(skt.getOutputStream());<br> <br>            // 讀取資料迴圈<br>            while((message = theInputStream.readLine()) != null) {<br>                // 將之顯示在TextView上<br>                message = ": " + message + "\n";<br>                chatBox.UpdateTextView();<br>            }<br>            <br>            if(message == null) {<br>                skt.close();<br>                message = "連線中斷！\n";<br>                chatBox.UpdateTextView();<br><br>            }<br>            <br>        }catch (IOException e) {<br>           message = e.toString();<br>           chatBox.UpdateTextView();<br>        }<br>       <br>    }<br>	//將要傳送的訊息傳給server端<br>	public void dataOutput(String data) {<br>		theOutputStream.println(data);<br>	}<br><br>}<br><br></code></pre>
<br>
<pre class="line-numbers"><code class="language-java match-braces"><br>package com.demo.android.chat;<br><br><br>import android.app.Activity;<br>import android.os.Bundle;<br>import android.os.Handler;<br>import android.view.LayoutInflater;<br>import android.view.View;<br>import android.view.View.OnClickListener;<br>import android.widget.Button;<br>import android.widget.EditText;<br>import android.widget.TextView;<br><br>public class Chat extends Activity {<br>    /** Called when the activity is first created. */<br>	<br>    private Button go;                   //發送訊息的按鈕<br>    private Button clientBtn;            //連接伺服器的按鈕<br>    private Button serverBtn;<br>    private EditText tfAddress ;         //輸入IP<br>    private EditText tfPort ;            //輸入Port<br>    private EditText tfChat ;            //輸入要傳送的訊息<br>    private TextView result ;            //伺服器端傳送的訊息display在這<br>    private ChatClientSocket clientSkt;  //客戶端連線處理執行緒<br><br>	public static Handler mHandler = new Handler();<br>	   <br>    <br>    final Runnable mUpdateResults = new Runnable() {<br>        public void run() {<br>            update();<br>        }<br>    };<br>    <br>    public void UpdateTextView(){<br>    	 mHandler.post(mUpdateResults);<br>    }<br>    @Override<br>    public void onCreate(Bundle savedInstanceState) {<br>        super.onCreate(savedInstanceState);<br>        setContentView(R.layout.main);<br>       // Listen for button clicks<br><br>		<br>        result = (TextView) findViewById(R.id.textview);<br>        tfAddress =(EditText)findViewById(R.id.ip);<br>        tfPort = (EditText)findViewById(R.id.port);<br>        tfChat = (EditText)findViewById(R.id.chat);<br>        clientBtn = (Button)findViewById(R.id.connect);<br>        go = (Button)findViewById(R.id.go_btn);<br>        clientBtn.setOnClickListener(connectserver);<br>        go.setOnClickListener(goserver);<br>    }<br>    <br>    //連接伺服器<br>    private OnClickListener connectserver = new OnClickListener(){<br>    	public void onClick(View v){<br>    		 setClient();<br>    	}<br>    };<br>    <br>    //傳送訊息給伺服器<br>    private OnClickListener goserver = new OnClickListener(){<br>    	public void onClick(View v){<br>    		// 將資料透過連線執行緒送出<br>            clientSkt.dataOutput(tfChat.getText().toString());<br>            // 清除下方文字欄位內容<br>            tfChat.setText("");<br>            <br>    	}<br>     };<br>	<br>    public void setServerBtn(Button serverBtn) {<br> 		this.serverBtn = serverBtn;<br> 	}<br> 	public Button getServerBtn() {<br>		return serverBtn;<br> 	}<br> 	<br> 	//對textView進行更新<br> 	private void update() {<br>    	result.append(clientSkt.getMessage());<br>    }<br> 	<br>    private void setClient() {<br>    	// 取得指定的IP與連接埠<br>        int port = Integer.parseInt(tfPort.getText().toString());<br>        // 建立客戶端連線執行緒<br>        clientSkt = new ChatClientSocket(tfAddress.getText().toString(), port);<br>        clientSkt.setMessageObserver(this);<br>        // 啟動執行緒進行連線<br>        clientSkt.start();<br>	}<br>    <br>}<br></code></pre>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/341/632</guid>
				<link>https://forum.andowson.com/posts/preList/341/632</link>
				<pubDate><![CDATA[Sat, 15 Aug 2009 16:57:26]]> GMT</pubDate>
				<author><![CDATA[ lingerkptor]]></author>
			</item>
	</channel>
</rss>