JAVA开发系列之:网络编程

一:网络知识
1:JAVA程序调用计算机命令
try {
            //查询当前机器的IP信息
            Process pro = Runtime.getRuntime().exec("ipconfig");
            InputStream is = pro.getInputStream();
            InputStreamReader isr = new InputStreamReader(is,"GBK");
            BufferedReader br = new BufferedReader(isr);
            String str = null;
            while((str = br.readLine())!=null) {
                System.out.println(str);
            }
            br.close();
            isr.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
2:网络分类
局域网,城域网,广域网
3:网络分层
一:应用层
支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不一样主机上的进程则使用应用层协议进行通讯。主要的协有:http、ftp、telnet、smtp、pop3等。
二:传输层
负责为信源和信宿提供应用程序进程间的数据传输服务,这一层上主要定义了两个传输协议,传输控制协议即TCP和用户数据报协议UDP。
三:网络层
负责将数据报独立地从信源发送到信宿,主要解决路由选择、拥塞控制和网络互联等问题。
四:数据链路层
负责将IP数据报封装成合适在物理网络上传输的帧格式并传输,或将从物理网络接收到的帧解封,取出IP数据报交给网络层。
五:物理层
负责将比特流在结点间传输,即负责物理传输。该层的协议既与链路有关也与传输介质有关。
4:IP地址的分类
A类:1~126
B类:128~191
C类:192~223
D类:224~239(组播通讯)
E类:240~254(科学研究)
5:端口
计算机与外界通讯的入口/出口,值介于0~65535之间(0~2^16)(每一个程序都有一个端口)。java

二:TCP/IP通讯编程

代码实现:
TCP/IP编程实现
客户端:
public class Client {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("localhost",8899);
        OutputStream os = socket.getOutputStream();
        InputStream is = socket.getInputStream();
        String mess = "hello";
        os.write(mess.getBytes());
        socket.shutdownOutput();
        int num;
        while((num = is.read())!=-1){
            System.out.print((char)num);
        }
        is.close();
        os.close();
        socket.close();
    }
}
服务器端:
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(8899);
        Socket socket = ss.accept();
        InputStream is = socket.getInputStream();
        OutputStream os = socket.getOutputStream();
        int num;
        while((num = is.read())!=-1){
            System.out.print((char)num);
        }
        String mess = "me too";
        os.write(mess.getBytes());
        socket.shutdownOutput();
        os.close();
        is.close();
        socket.close();
        ss.close();
    }
}
三:UPD通讯服务器

代码实现:
客户端A:
package com.company.demo.server;网络

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.util.Scanner;socket

public class Test13 {
    public static void main(String[] args) {
        try {
            DatagramSocket service = new DatagramSocket(6666);
            InputA i = new InputA(service);
            OutputA o = new OutputA(service);
            Thread thread1 = new Thread(i);
            Thread thread2 = new Thread(o);
            thread1.start();
            thread2.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }ide

    // 负责输出的内部类
    private static class InputA implements Runnable {this

        private DatagramSocket service;
        private byte[] input;
        private DatagramPacket packet;.net

        public InputA(DatagramSocket service) {
            super();
            this.service = service;
            this.input = new byte[1024];
            this.packet = new DatagramPacket(input, 0, input.length);
        }server

        @Override
        public void run() {
            while (true) {
                show();
            }
        }进程

        public void show() {
            try {
                service.receive(packet);
                input = packet.getData();
                System.out.println(new String(input, 0, input.length));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

    // 负责输入的内部类
    private static class OutputA implements Runnable {

        private DatagramSocket service;
        private byte[] output;
        private DatagramPacket packet;
        private InetSocketAddress socket;
        private Scanner scan;

        public OutputA(DatagramSocket service) {
            super();
            this.service = service;
            this.socket = new InetSocketAddress("localhost", 8888);
            this.output = new byte[1024];
        }

        @Override
        public void run() {
            while (true) {
                show();
            }
        }

        public void show() {
            try {
                scan = new Scanner(System.in);
                String str = scan.next();
                output = str.getBytes();
                packet = new DatagramPacket(output, output.length, socket);
                service.send(packet);
            } catch (Exception e) {

            }
        }

    }

}


客户端B:
package com.company.demo.server;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.util.Scanner;


public class Test14 {
    public static void main(String[] args) {
        try {
            DatagramSocket service = new DatagramSocket(8888);
            InputA i = new InputA(service);
            OutputA o = new OutputA(service);
            Thread thread1 = new Thread(i);
            Thread thread2 = new Thread(o);
            thread1.start();
            thread2.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 负责输出的内部类
    private static class InputA implements Runnable {

        private DatagramSocket service;
        private byte[] input;
        private DatagramPacket packet;

        public InputA(DatagramSocket service) {
            super();
            this.service = service;
            this.input = new byte[1024];
            this.packet = new DatagramPacket(input, 0, input.length);
        }

        @Override
        public void run() {
            while (true) {
                show();
            }
        }

        public void show() {
            try {
                service.receive(packet);
                input = packet.getData();
                System.out.println(new String(input, 0, input.length));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

    // 负责输入的内部类
    private static class OutputA implements Runnable {

        private DatagramSocket service;
        private byte[] output;
        private DatagramPacket packet;
        private InetSocketAddress socket;
        private Scanner scan;

        public OutputA(DatagramSocket service) {
            super();
            this.service = service;
            this.socket = new InetSocketAddress("localhost", 6666);
            this.output = new byte[1024];
        }

        @Override
        public void run() {
            while (true) {
                show();
            }
        }

        public void show() {
            try {
                scan = new Scanner(System.in);
                String str = scan.next();
                output = str.getBytes();
                packet = new DatagramPacket(output, output.length, socket);
                service.send(packet);
            } catch (Exception e) {

            }
        }

    }

}

相关文章
相关标签/搜索