zoukankan      html  css  js  c++  java
  • 《精通android网络开发》--使用Socket实现数据通信

    No1:

    网络传输应用通常使用TCP、IP或UDP这三种协议实现数据传输。在传输数据的过程中,需要通过一个双向的通信连接实现数据的交互。在这个传输过程中,通常将这个双向链路的一端称为Socket,一个Socket通常由一个IP地址和一个端口号来确定。

    No2:

    在网络编程中有两个主要的问题,一个是如何准确地定位网络上的一台或多台主机,另一个就是找到主机后如何可靠高效地进行数据传输。

    在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠(TCP)的或非可靠(UDP)的数据传输机制。

    No3:

    Socket工作过程基本步骤:

    1)创建Socket

    2)打开连接到Socket的输入/输出流

    3)按照一定的协议对Socket进行读/写操作

    4)关闭Socket

    No4:

    聊天室程序在服务端包含多条线程,其中每个Socket对应一条线程,该线程负责读取Socket对应输入流的数据(从客户端发送过来的数据),并将读到的数据向每个Socket输出流发送一遍(将衣蛾客户端发送的数据“广播”给其他客户端),因此需要在服务器端使用List来保存所有的Socket。

    public class IServer{
        //定义保存所有Socket的ArrayList
        public static ArrayList<Socket> socketList = new ArrayList<Socket>();
        public static void main(String[] args) throws IOException{
            ServerSocket ss = new ServerSocket(3000);
            while(true){
                //此行代码会阻塞,将一直等待别人的连接
                Socket s = ss.accept();
                socketList.add(s);
                //每当客户端连接后启动一条ServerThread线程为该客户端服务
                new Thread(new Serverxian(s)).satart();
            }
        }
    }
    //负责处理每个线程通信的线程类
    public class Serverxian implements Runnable{
        //定义当前线程所处理的Socket
        Socket s = null;
        //该线程所处理的Socket所对应的输入流
        BufferedReader br = null;
        public Serverxian(Socket s) throws IOException{
            this.s = s;
            //初始化该Socket对应的输入流
            br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        }
        
        public void run(){
            try{
                String content = null;
                //采用循环不断从Socket中读取客户端发送过来的数据
                while((content = readFromClient())!=null){
                    //遍历socketList中的每个Socket
                    //将读到的内容向每个Socket发送一次
                    for(Socket s:IServer.socketList){
                        PrintStream ps = new PrintStream(s.getOutputStream());
                        ps.println(content);
                    }
                }
            }catch(IOException e){
                //e.printStackTrace();
            }
        }
        //定义读取客户端数据的方法
        private String readFromClient(){
            try{
                return br.readLine();
            }catch(IOException e){
                //如果捕捉到异常,表明该Socket对应的客户端已经关闭
                //删除该Socket
                IServer.socketList.remove(s);
            }
            return null;
        }
    }
  • 相关阅读:
    75. Sort Colors
    101. Symmetric Tree
    121. Best Time to Buy and Sell Stock
    136. Single Number
    104. Maximum Depth of Binary Tree
    70. Climbing Stairs
    64. Minimum Path Sum
    62. Unique Paths
    css知识点3
    css知识点2
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8423439.html
Copyright © 2011-2022 走看看