android socket 客户端 服务器端

以下代码是android 客户端主要代码;视频教程:http://www.jikexueyuan.com/course/200_5.html

Socket socket = null;
    BufferedWriter writer = null;
    BufferedReader reader = null;

    public void connect() {


        AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() {

            @Override
            protected Void doInBackground(Void... arg0) {
                try {
                    socket = new Socket(ip.getText().toString(), 33333);
                    writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    publishProgress("@success");
                } catch (UnknownHostException e1) {
                    Toast.makeText(MainActivity.this, "无法连接到服务器", Toast.LENGTH_SHORT).show();
                } catch (IOException e1) {
                    Toast.makeText(MainActivity.this, "无法连接到服务器", Toast.LENGTH_SHORT).show();
                }
                try {
                    String line;
                    while ((line = reader.readLine())!= null) {
                        publishProgress(line);
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onProgressUpdate(String... values) {
                if (values[0].equals("@success")) {
                    Toast.makeText(MainActivity.this, "连接到服务器", Toast.LENGTH_SHORT).show();

                }

                text.append("对方说"+values[0]+"\n");
                super.onProgressUpdate(values);
            }
        };
        read.execute();

    }

    public void send() {
        try {
            text.append("我说"+editText.getText().toString()+"\n");
            writer.write(editText.getText().toString()+"\n");
            writer.flush();
            editText.setText("");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

服务器端代码;

public class LEDscoket {

    public static void main(String[] args) {
         new ServerListener().start();
    }

}
public class ServerListener  extends Thread{
        public void run() {
            try {
                ServerSocket serverscoket =new ServerSocket(33333);
                while(true){
                    Socket scoket =serverscoket.accept();
//                  JOptionPane.showMessageDialog(null, "连接到33333");
                    ChatScoket cs=new ChatScoket(scoket);
                    cs.start();
                    ChatManage.getChatManage().add(cs);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

}
public class ChatScoket extends Thread{
    Socket scoket;
         public ChatScoket(Socket  s) {
            this.scoket=s;
        }

         public  void out(String out)  {
             try {
                 scoket.getOutputStream().write((out+"\n").getBytes("UTF-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                System.out.println("断开了一个客户端链接");
                ChatManage.getChatManage().remove(this);
                e.printStackTrace();
            }
        }
         @Override
        public void run() {
                out("{\"message\":\"success\",\"saledata\":[{\"itemid\":\"0d8de188-4c66-4d53-834f-d9e29a2562c3\",\"itemname\":\"黄金南瓜\",\"averageprice\":\"2.30\"},{\"itemid\":\"0d8de188-4c66-4d53-834f-d9e29a2562c3\",\"itemname\":\"大白菜\",\"averageprice\":\"2.60\"},{\"itemid\":\"0d8de188-4c66-4d53-834f-d9e29a2562c3\",\"itemname\":\"黄瓜\",\"averageprice\":\"2.31\"},{\"itemid\":\"0d8de188-4c66-4d53-834f-d9e29a2562c3\",\"itemname\":\"大白菜\",\"averageprice\":\"4.62\"},{\"itemid\":\"0d8de188-4c66-4d53-834f-d9e29a2562c3\",\"itemname\":\"金针菇\",\"averageprice\":\"3.40\"},{\"itemid\":\"0d8de188-4c66-4d53-834f-d9e29a2562c3\",\"itemname\":\"荸荠\",\"averageprice\":\"4.50\"},{\"itemid\":\"0d8de188-4c66-4d53-834f-d9e29a2562c3\",\"itemname\":\"大葱\",\"averageprice\":\"2.38\"},{\"itemid\":\"b12afcca-bff1-4651-ae71-bce6d70a25e4\",\"itemname\":\"金花菜\",\"averageprice\":\"2.60\"},{\"itemid\":\"0d8de188-4c66-4d53-834f-d9e29a2562c3\",\"itemname\":\"土豆\",\"averageprice\":\"4.00\"},{\"itemid\":\"a014caa1-2109-4c8f-b5a4-42cd7ba70e58\",\"itemname\":\"白萝卜\",\"averageprice\":\"4.00\"},{\"itemid\":\"8a7207a1-786e-4523-9154-b983567a3164\",\"itemname\":\"胡萝卜\",\"averageprice\":\"4.00\"}],\"rentalname\":\"瑶瑶\",\"ownerattachmentid\":\"/save/img/20160315/a4f9c7de-caee-435d-97e3-38d3a7822c60.png\",\"registrationnumber\":\"蔬菜1\",\"businesstype\":\"蔬菜\",\"boothnum\":\"肉001-002\"}");
                try {
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(
                                scoket.getInputStream(),"UTF-8"));
                String line = null;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                    ChatManage.getChatManage().sent(this, line);
                }
                br.close();
                System.out.println("断开了一个客户端链接");
                ChatManage.getChatManage().remove(this);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                System.out.println("断开了一个客户端链接");
                ChatManage.getChatManage().remove(this);
                e.printStackTrace();
            }
        }
}

管理器 加入队列

public class ChatManage {
    private ChatManage(){}
    private static final ChatManage cm=new ChatManage();
    public static ChatManage getChatManage(){
        return cm;
    }
    Vector<ChatScoket> vector =new Vector<ChatScoket>();
    public void add(ChatScoket cs) {
        vector.add(cs);
    }
    public void remove(ChatScoket cs) {
        vector.remove(cs);
    }
     public  void sent(ChatScoket cs,String out) {
         for (int i = 0; i < vector.size(); i++) {
            ChatScoket cschat=vector.get(i);
            if(!cs.equals(cschat)){
                cschat.out(out);
            }
        }
    }
}

我主要做的是从服务器获取数据在android 客户端显示:
所以在服务器端加一个时钟,一定时间发送一次数据,客户端自动显示。

下载android 端 :http://download.csdn.net/detail/u012922981/9529743
下载服务器端:http://download.csdn.net/detail/u012922981/9529728
服务器端在esplice 里面运行,他们建立连接主要是端口号;随后还的做相应的过滤,不同客户端接受的数据不一样的结果,进一步编程中;随后更新;看不懂代码,就去看我上面的学习视频;

猜你喜欢

转载自blog.csdn.net/u012922981/article/details/51491918