Java 之 网络编程

1.OSI模型

  a.全称:开放系统互联

  b.七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

  c.注意:OSI模型 是所谓的 理论标准

 

2.TCP/IP模型

  a.四层模型:应用层、传输层、网络互联层、网络接口层

        应用层——对应OSI模型中的 应用层、表示层、会话层

        传输层——对应OSI模型中的 传输层

        网络互联层——对应OSI模型中的 网络层

        网络接口层——对应OSI模型中的 数据链路层、物理层

  b.特点:①TCP是一种安全的协议,但速度没有UDP快

      ②TCP有三次握手机制,保证传输的安全性

      ③http、smtp、soap、ftp 底层指定使用TCP,被称为 TCP/IP协议簇

  c.端口号:端口号只能为 0~65535,注意前1024不准使用

       tel:23  smtp:25  ftp:21  http:80

 

 

3.Socket类

  a.客户端——消息的发起方

    ①得到要发送的消息,可以接收外部输入

String msg = new Scanner(System.in).next();

    ②得到Socket对象

Socket sc = null;
sc = new Socket("127.0.0.1",9527);        //传IP地址与端口号

    ③把消息交给Socket对象——由于是发送,所以方向是输出流;发送内容可以是文本也可以是二进制数据,所以它提供的是字节流——综上,一定是OutputStream

OutputStream out = sc.getOutputStream();        //方法一
out.write(msg.getBytes());
out.flush();

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sc.getOutputStream()));        //方法二
bw.write(msg);
bw.flush();

    ④在finally块中关闭通道

if(sc != null){
    try {
        sc.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 

  b.服务端

    ①创建服务器监听器

ServerSocket server = null;
server = new ServerSocket(9527);

    ②开始监听

while(true){
    Socket socket = server.accept();        //accept会进入阻塞状态,一旦有消息发送过来,就返回Socket对象
    //④开启子线程进行消息处理
    new ProcessThread(socket);    
}

    ③在finally块中关闭通道

if(server != null){
    try {
        server.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

    ④在子线程中,从Socket的InputStream取数据

public void run() {
    BufferedReader br = null;
    try {
        br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String msg = br.readLine();
        System.out.println("接收的消息:" + msg);
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        if(br != null){
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
                
        }
        if(socket != null){
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
        
}

    

    

       

 

posted @ 2017-01-08 18:34  晨M风  阅读(171)  评论(0编辑  收藏  举报