綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] Android Client和Server連接

[複製連結] 查看: 1568|回覆: 4|好評: 0
跳轉到指定樓層
樓主
caonipig | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2014-10-1 14:17

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 caonipig 於 2014-10-1 18:53 編輯

目前開發一個專案是將Client端的留言傳到Android Server上的SQLite儲存
想請問一下大家 Client和Server設定在同一個Port照理說不就會連到嗎?
Log顯示出Client在InetAddress後就跳到IO例外了 要怎麼解決呢?
以下是程式碼:
package ccc.ClientSocketDemo3;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class ClientSocketDemo3 extends Activity {
        public static Handler mHandler = new Handler();
        TextView TextView01;        // 用來顯示文字訊息
        EditText EditText01;        // 文字方塊
        EditText EditText02;        // 文字方塊
        String tmp;                                // 暫存文字訊息
        //Socket clientSocket;        // 客戶端socket
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                TextView01 = (TextView) findViewById(R.id.TextView01);
                EditText01=(EditText) findViewById(R.id.EditText01);
                EditText02=(EditText) findViewById(R.id.EditText02);
                /*Thread t = new Thread(readData);
                t.start();*/
                Button button1=(Button) findViewById(R.id.Button01);
               
               
                button1.setOnClickListener(new Button.OnClickListener() {               
                public void onClick(View v) {
                        try {
                                InetAddress addr =InetAddress.getByName("192.168.0.12");
                                Socket soc = new Socket(addr, 91);
                                Toast.makeText(ClientSocketDemo3.this, "輸入成功", Toast.LENGTH_LONG).show();
                                OutputStream oos = soc.getOutputStream();
                                BufferedWriter bw;
                                        try {
                                                bw = new BufferedWriter( new OutputStreamWriter(oos));
                                                bw.write(EditText01.getText()+"$"+EditText02.getText()+"
");
                                                bw.flush();
                                        } catch (IOException e) {
                                                        }
                                        EditText02.setText("");
                                //}       
                        } catch (UnknownHostException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        }
                       
                });
               
        }
        private Runnable updateText = new Runnable() {
                public void run() {
                        TextView01.append(tmp + "
");
                }
        };
        /*private Runnable readData = new Runnable() {
                public void run() {
                        //InetAddress serverIp;
                        try {
                                //serverIp = InetAddress.getByName("10.0.2.2");
                                //int serverPort = 5050;
                                //clientSocket = new Socket(serverIp, serverPort);
                                BufferedReader br = new BufferedReader(new InputStreamReader(
                                                clientSocket.getInputStream()));
                                while (clientSocket.isConnected()) {
                                        tmp = br.readLine();
                                        if(tmp!=null)
                                                mHandler.post(updateText);
                                }
                        } catch (IOException e) {
                        }
                }
        };*/

}
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
whl | 收聽TA | 只看該作者
發表於 2014-10-2 07:20

回帖獎勵 +2

1.網路部分請使用thread來處理。
2.貼 log 來看看。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 0 反對 1

使用道具 舉報

板凳
 樓主| caonipig | 收聽TA | 只看該作者
發表於 2014-10-2 22:49
1.我是用Thread來撰寫Server的部分
package com.example.androidserversocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.StringTokenizer;

import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.TextView;

        public class MainActivity extends Activity {
                TextView info, infoip, msg;
                String message = "";
                ServerSocket serverSocket;
                DBConnection connect;
                SQLiteDatabase db;
                ArrayList<HashMap<String, String>> listvalues;
                ListView listview;
                private int mYear;
                private int mMonth;
                private int mDay;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                info = (TextView) findViewById(R.id.info);
                connect=new DBConnection(MainActivity.this);
                Calendar c=Calendar.getInstance();//建立抓日期物件c
        mYear=c.get(Calendar.YEAR);//年
        mMonth=c.get(Calendar.MONTH);//月
        mDay=c.get(Calendar.DAY_OF_MONTH);//日   
        listvalues = new ArrayList<HashMap<String,String>>();
                listview = (ListView)findViewById(R.id.listview);
                /*infoip = (TextView) findViewById(R.id.infoip);
                msg = (TextView) findViewById(R.id.msg);
                infoip.setText(getText());*/
                Thread socketServerThread = new Thread(new SocketServerThread());
                socketServerThread.start();
               
                }
        @Override
        protected void onDestroy() {
                super.onDestroy();
                if (serverSocket != null) {
                        try {
                                serverSocket.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
        }
       
        //Server由Thread開始執行
        private class SocketServerThread extends Thread{
                        public void run() {
                               
                                ServerSocket listener;
                                try {
                                        listener = new ServerSocket(91);
                                        Log.v("tag","messageserver1");
                            while (true) {
                                Socket socket = listener.accept();
                                Log.v("tag","messageserver2");
                                try {
                                        InputStream is = socket.getInputStream();
                                        BufferedReader br = new BufferedReader(new InputStreamReader(is));
                                        String str = br.readLine();
                                        StringTokenizer st = new StringTokenizer(str, "$");
                                        String username = st.nextToken();
                                        String detail = st.nextToken();
                                        String by = st.nextToken();
                                        String date =st.nextToken();
                                        ContentValues values = new ContentValues();
                                        values.put("username", username.toString());
                                                    values.put("detail", detail.toString());
                                                    values.put("by", by.toString());
                                                    values.put("date",date);
                                                    db.insert("contact", null, values);       
                                                    db.close();
                                       
                                        }finally{
                                 socket.close();
                                                        }
                                                                 }
                                    }catch (IOException e1) {
                                                // TODO Auto-generated catch block
                                                e1.printStackTrace();
                                                        }
                                                }
                                          }
       
                                }

2.Log的部分
10-02 14:42:38.490: D/ExchangeService(685): Received deviceId from Email app: null
10-02 14:42:38.490: D/ExchangeService(685): !!! deviceId unknown; stopping self and retrying
10-02 14:42:43.510: D/ExchangeService(685): !!! EAS ExchangeService, onCreate
10-02 14:42:43.520: D/ExchangeService(685): !!! EAS ExchangeService, onStartCommand, startingUp = false, running = false
10-02 14:42:43.532: D/ExchangeService(685): !!! EAS ExchangeService, onStartCommand, startingUp = true, running = false
在跑完InetAddress下的message1之後直接跳到下面IO例外的message5,顯示了上面這些
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
whl | 收聽TA | 只看該作者
發表於 2014-10-3 20:01
1.我有說網路只有 server 端才需要用 thread 處理嗎?
2.server 端的 port 沒記錯的話在 1024 以下好像不能用。
3.log 看起來不像是當機時的 log。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
ivan0910677567 | 收聽TA | 只看該作者
發表於 2014-11-10 19:34
由 手機網頁 發佈
caonipig 發表於 2014-10-1 14:17目前開發一個專案是將Client端的留言傳到Android Server上的SQLite儲存想請問一下大家 Client和Server設定 ...

好 軟体是一定要支持的 謝謝
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則