码迷,mamicode.com
首页 > 其他好文 > 详细

20170403总结

时间:2017-04-03 22:59:00      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:处理   import   color   发送消息   iter   方向   应用   网络通信   cti   

20170319 - 20170403学习内容:

       1.Android网络应用:

           (1) 基于TCP协议的网络通信:

                  IP协议负责将消息从一个主机传送到另一个主机,消息在传送过程中被分割成一个个小包。

         TCP协议负责收集这些信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确的还原;

      (2)使用ServerSocket创建TCP服务器端

       在两个通信实体没有建立虚拟链路之前,必须有一个通信实体先做出“主动姿态”,主动接受来自其他通信实体的连接请求。

       Java中能接收其他通信实体连接请求的类是ServerSocket。

/**
*服务器端
*/
1
//创建一个ServerSocket,用于监听客户端Socket的连接请求 2 ServerSocket ss = new ServerSocket(30000); 3 //采用循环不断接收来自客户端的请求 4 while(true){ 5 //每当接收到客户端Socket的请求时,服务器端也对应产生一个Socket 6 Socket s = ss.accept(); 7 //下面就可以使用Socket进行通信了 8 ...... 9 }

     使用Socket进行通信

           

1 //创建连接到服务器ip地址(例如:118.89.228.123、端口30000的Socket)
2 Socket s = new Socket("118.89.228.123",30000);
3 //使用Socket进行通信
4 
5 ....


     使用Socket建立聊天室:

          服务器端:

         

 1 import java.io.IOException;
 2 import java.io.OutputStream;
 3 import java.io.PrintStream;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6 import java.security.Provider.Service;
 7 import java.util.ArrayList;
 8 
 9 
10 public class MySever {
11     //定义保存所有Socket的ArrayList
12     public static ArrayList<Socket> socketList = new ArrayList<Socket>();
13 
14     public static void main(String[] args) throws IOException {
15         ServerSocket ss = new ServerSocket(40000);
16         while(true){    
17             //此行代码会阻塞,将一直等待别人的连接
18             Socket s = ss.accept();
19             socketList.add(s);
20             //每当客户端连接后启动一条ServerThread线程为该客户端服务
21             new Thread(new ServerThread(s)).start();
22         }
23     }
24 }


 

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.io.OutputStream;
 5 import java.io.UnsupportedEncodingException;
 6 import java.net.Socket;
 7 import java.net.SocketException;
 8 import java.util.Iterator;
 9 
10 /**
11  * 作用:负责处理每条线程通信的线程类
12  * @author lenovo
13  *
14  */
15 
16 public class ServerThread implements Runnable{
17     //定义当前线程所处理的Socket
18     Socket s = null;
19     //该线程所处理的Socket所对应的输入流
20     BufferedReader br = null;
21     public ServerThread(Socket s) throws IOException{
22         this.s = s;
23         //初始化该Socket对应的输入流
24         br = new BufferedReader(new InputStreamReader(s.getInputStream(),"utf-8"));
25     }
26 
27     public void run() {
28         try{
29             // TODO Auto-generated method stub
30             String content = null;
31             //采用循环不断从Socket中读取客户端发送过来的数据
32             while((content = readFromClient()) != null){
33                 //遍历socketList中的每个Socket
34                 //将读到的内容向每个Socket发送一次
35                 for(Iterator<Socket> it = MySever.socketList.iterator();it.hasNext();){
36                     Socket s = it.next();
37                     OutputStream os;
38                     try {
39                         os = s.getOutputStream();
40                         os.write((content + "\n").getBytes("utf-8"));
41                     } catch (SocketException e) {
42                         // TODO Auto-generated catch block
43                         e.printStackTrace();
44                         it.remove();
45                         System.out.println(MySever.socketList);
46                     }
47                 }
48             }    
49         }catch(IOException e){
50             e.printStackTrace();
51         }        
52     }
53     
54     //定义读取客户端数据的方法
55     private String readFromClient(){
56         try {
57             return br.readLine();
58         } catch (IOException e) {  //如果捕捉到异常,表明该Socket对应的客户端已经关闭
59             // TODO Auto-generated catch block
60             e.printStackTrace();
61             //删除该Socket
62             MySever.socketList.remove(s);
63         }
64         return null;
65     }
66 
67 }


 

      客户端:

 1 package com.crazyit.test;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.os.Handler;
 6 import android.os.Message;
 7 import android.view.View;
 8 import android.widget.Button;
 9 import android.widget.EditText;
10 import android.widget.TextView;
11 
12 public class MainActivity extends Activity {
13     private EditText input;
14     private TextView show;
15     private Button send;
16     private Handler handler;
17 
18     //定义与服务器通信的子线程
19     private ClientThread clientThread;
20 
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_main);
25         input = (EditText) findViewById(R.id.input);
26         send = (Button) findViewById(R.id.send);
27         show = (TextView) findViewById(R.id.show);
28 
29         handler = new Handler(){
30             @Override
31             public void handleMessage(Message msg) {
32                 //如果消息来自于子线程
33                 if (msg.what == 0x123){
34                     //将读取的内容追加显示在文本框中
35                     show.append("\n" + msg.obj.toString());
36                 }
37             }
38         };
39         clientThread = new ClientThread(handler);
40         //客户端启动ClientThread线程创建网络连接,读取来自服务器的数据
41         new Thread(clientThread).start();
42         send.setOnClickListener(new View.OnClickListener() {
43             @Override
44             public void onClick(View v) {
45                 //当用户点击发送按钮后,将用户输入的数据封装成Message,然后发送给子线程的Handler
46                 Message msg = new Message();
47                 msg.what = 0x345;
48                 msg.obj = input.getText().toString();
49                 clientThread.revHandler.sendMessage(msg);
50                 //清空input文本框
51                 input.setText("");
52             }
53         });
54     }
55 }

 

 1 package com.crazyit.test;
 2 
 3 import android.os.Handler;
 4 import android.os.Looper;
 5 import android.os.Message;
 6 
 7 import java.io.BufferedReader;
 8 import java.io.IOException;
 9 import java.io.InputStreamReader;
10 import java.io.OutputStream;
11 import java.net.Socket;
12 import java.net.SocketTimeoutException;
13 
14 /**
15  * Created by Zeng on 2017/3/27.
16  */
17 public class ClientThread implements Runnable{
18     private Socket s;
19     //定义向UI线程发送消息的Handler对象
20     private Handler handler;
21     //定义接收UI线程的消息的Handler对象
22     public Handler revHandler;
23     //该线程所处理的Socket所对应的输入流
24     BufferedReader br = null;
25     OutputStream os = null;
26 
27     public ClientThread(Handler handler){
28         this.handler = handler;
29     }
30 
31     @Override
32     public void run() {
33         try {
34             s = new Socket("118.89.228.123",30000);//服务器
35 //            s = new Socket("172.16.69.122",40000);//本地运行
36             br = new BufferedReader(new InputStreamReader(s.getInputStream()));
37             os = s.getOutputStream();
38             new Thread(){
39                 @Override
40                 public void run() {
41                     String content = null;
42                     try{
43                         while ((content = br.readLine()) != null){
44                             Message message = new Message();
45                             message.what = 0x123;
46                             message.obj = content;
47                             handler.sendMessage(message);
48                         }
49                     }catch (IOException e){
50                         e.printStackTrace();
51                     }
52                 }
53             }.start();
54             //为当前线程初始化Looper
55             Looper.prepare();
56             //创建revHandler对象
57             revHandler = new Handler(){
58                 @Override
59                 public void handleMessage(Message msg) {
60                     //接收UI线程中用户输入的数据
61                     if (msg.what == 0x345){
62                         //将用户在文本框输入的内容写入网络
63                         try {
64                             os.write((msg.obj.toString() + "\r\n").getBytes("utf-8"));
65                         } catch (IOException e) {
66                             e.printStackTrace();
67                         }
68                     }
69                 }
70             };
71             //启动Looper
72             Looper.loop();
73         }catch (SocketTimeoutException e1){
74             System.out.println("网络连接超时!!!");
75         }
76         catch (IOException e) {
77             e.printStackTrace();
78         }
79     }
80 }


2.学习OKHttp使用方法及其部分源码,接下来继续学习其实现机制。

3.学习Java部分设计模式:

    (四)工厂模式: (1)静态工厂模式:TextUtil.isEmpty()

           (2)简单工厂模式:卖肉夹馍

           (3)工厂方法模式:把类的实例化过程推迟到子类

           (4)抽象工厂模式:提供一个接口,用于创建相关的或者依赖对象的家族,而不需要明确指定具体类

  (五)单例模式:(1)饿汉模式

1 public class Singleton  
2 {  
3     private static Singleton instance = new Singleton();  
4       
5     public static Singleton getInstance()  
6     {  
7         return instance ;  
8     }  
9 } 

 

         (2)赖汉  

 1 public class Singleton02  
 2 {  
 3     private static Singleton02 instance;  
 4   
 5     public static Singleton02 getInstance()  
 6     {  
 7         if (instance == null)  
 8         {  
 9             synchronized (Singleton02.class)  
10             {  
11                 if (instance == null)  
12                 {  
13                     instance = new Singleton02();  
14                 }  
15             }  
16         }  
17         return instance;  
18     }  
19 }

      (3)枚举:

1 public enum Singleton03  
2 {  
3     INSTANCE;  
4 }  

      (4)使用一个持有类

 1 public class Singleton04  
 2 {  
 3     private static final class InstanceHolder  
 4     {  
 5         private static Singleton04 INSTANCE = new Singleton04();  
 6     }  
 7   
 8     public static Singleton04 getInstance()  
 9     {  
10         return InstanceHolder.INSTANCE;  
11     }  
12 }  

 

 3、学习了Git的基本使用,下阶段将继续学习更多操作;

上述许多代码来自张鸿洋大神的博客:特此注明:http://blog.csdn.net/lmj623565791/article/category/2206597

 

总结:

     这两星期来总体学习效率不高,在学习开源开源项目时经常遇到很多问题,很多问题解决不了就很难以进行下一步的学习,这两周来看了两个关于使用百度推送的即时通信软件,一直困扰在其推送机制上,弄明白是如何实现推送的;另外一方面可能是毕业论文方向的问题,看了好多论文关于分级保护的论文非常有限,遇到一些问题只能自己慢慢琢磨,问老师甩给我的第一句就是自己想,自己网上找!!!!

下一阶段将继续学习上述存在的问题,并把Android一些章节学完,漏了好多章节没看,现在写代码困难重重!!!!!

 

 

  

 

        

20170403总结

标签:处理   import   color   发送消息   iter   方向   应用   网络通信   cti   

原文地址:http://www.cnblogs.com/zengjiqiang/p/6663788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!