java网络编程

Posted on 2019-05-09 14:13  Fouro'clock  阅读(102)  评论(0)    收藏  举报

---恢复内容开始---

网络编程主要用于计算机与计算机(手机、平板)之间的数据传输问题。

网络编程不需要基于html就可以完成数据的传输。

网络编程的三要素:ip+端口号+协议。

ip地址=网络号+主机号

ip地址的分类:

  A:一个网络号+3个主机号  (政府用)

  B:两个网络号+2个主机号 (教育机构用)

  C:三个网络号+1个主机号 (民用)

InetAddress.getByName  -- 根据主机名或10禁止进制ip地址获取主机
InetAddress.getAllByName -- 根据域名获取ip 一个域名可能对应多态服务器

协议:tcp/udp

udp发送消息(会丢失数据):
发送端:
  1、建立udp发送信息的通道,只负责发送,不负责ip和端口的绑定。DataGramSocket类
  2、准备消息 将发送的消息放到udp包中。DataGramPacket
  3、发送数据。
  4、关闭连接,释放端口。
接收端:
  1、建立udp发送信息的通道,绑定对应接收消息的端口。
  2、建立接收消息的空包。
  3、接收端接收数据,接收端为一直等待类型,等到消息处理后才关闭。
  4、DataGramPacket.getLength()存储接收到消息的长度。
tcp协议
tcp协议是面向连接的可靠传输协议,类似迅雷等需要不丢失数据的可用,而且udp只可以传输64kb上限的消息,tcp协议没有传输大小上线,但是因为在传输前需要三次握手,所有速度相对udp慢。
tcp客户端:Socket类。
  Socket自带输入输出流,可以发送接收消息。
tcp服务端:ServerSocket类
下面是编写了一份类似qq的聊天类:
class ChatClint{
    public static void main(String[] args) throws IOException{
        Socket socket = new Socket(InetAddress.getLocalHost(),9090);
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
        //获取键盘读取数据
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while((line = bufferedReader.readLine())!=null){
            outputStreamWriter.write(line+"\r\n");
            outputStreamWriter.flush();
            BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String we = null;
            while ((we = bufferedReader1.readLine())!=null){
                System.out.println(we);
            }

        }
        socket.close();
    }
}
class ChatServer{
    public static void main(String[] args) throws IOException{
        ServerSocket serverSocket = new ServerSocket(9090);
        Socket socket = serverSocket.accept();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = null;
        while ((line = bufferedReader.readLine())!=null){
            System.out.println("服务端接收数据"+line);
            //回复一下人家
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
            BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(System.in));
            String next = null;
            while((next = bufferedReader1.readLine())!=null){
                outputStreamWriter.write(next+"\r\n");
                outputStreamWriter.flush();
            }
        }
        serverSocket.close();
    }
}





---恢复内容结束---