网络

通过InetAddress类的静态方法可以通过指定的主机域名或者IP地址获得指定目标的IP地址封装类实例,里面包含了目标的域名和IP地址;


网络编程的工作大部分都是对流进行处理,而流,指的是通过一定的路径,从源传递到目的的,字节序列;

java中的流分为2种,输入流和输出流;

输入输出流的基类(OutputStream和InputStream)都放在java.io里,它们都有一些常用的子类,比如说文件中,FIle+... 代表文件输X流,前缀代表目的地,还有网络连接中,Telnet+...,前缀也是一样的含义,还有Byte Array+...代表目的地是可扩展的数组;

流,毕竟是字节序列,想要转换成字符序列需要用到相应的流处理工具:输出流和输入流的处理工具的基类分别是Writer和Reader,但是它们的效率并不好,所以一般多用它们的子类来操作流,比如PrintWriter,用print和println来更方便地写入指定对象,比如用InputStreamReader来代替Reader,但是为了提高使用效率,一般还是用BufferReader来封装它,起到缓冲读取的作用;

对于BufferedReader的实例,用实例.read(容器)的方法来读取流里的数据,返回值是该值的长度,对于PrintWriter的实例,用实例.print(“需要写入到流里的内容”)来把数据写入到流里,同时使用实例.flush()来刷新流的内容;


主机上的进程用端口号来表示,就是IP地址+:PORT;

套接字用来表示主机之间的进程之间的连接关系,所以由源主机的IP地址,进程的端口号,以及目的主机的IP地址,进程端口号4个元素组成;流套接字是可靠的,数据报套接字是不可靠的;


TCP,需要客户端和服务器端分别创建自己的套接字,java中,客户端使用Socket类来创建自己的套接字,服务器端使用ServerSocket类来创建自己的套接字;

因为Socket和ServerSocket是流套接字,所以里面包含了流,可以通过流来传递数据;对于服务器端,创建了指定监听目标的ServerSocket实例后,用ServerSocket的accept方法来创建Socket的实例,表示允许连接,而对于客户端,通过向Socket里传入服务器的IP地址以及端口来创建实例,以此创建连接请求;

对于多个客户端,服务器端需要把接受请求和处理请求分开,使得可以同时进行,这也就意味着处理请求要使用多线程实现;


UDP,传递的就不是流了,而是数据报,用DatagramPacket来装载数据报,用DatagramSocket来接受和发送数据报;

DatagramPacket在作为发送的数据报时,需要指定发送的内容,内容的长度,以及该数据报的目标主机,端口号(目标主机和端口号可以用一个SocketAddress来代替),其中,内容必须是字节型数组byte[],而在作为接收的数据报时,只需接受内容及长度;在UDP模式中,发送方通过DatagramPacket数据包来指定要发送的地址,而接受方(服务器)通过DatagramSocket来指定监听的地址和端口;


TCP和UDP的对比,内容上:一个是把内容放在Socket的流里面,通过创建流的操作工具类的实例进行操作,另一个是把内容封装在DatagramPacket里,在创建DatagramPacket时指定储存的字节数组,通过数组取出数据;

在指定接受目标和发送目标上:一个是在创建Socket时,指定发送目标的主机和端口,而在接受时,在创建ServerSocket时指定监听的主机和端口,另一个是在DatagramPacket的创建里指定发送目标的主机和端口,由DatagramSocket发送,而在接收的时候,由DatagramSocket指定监听的目标主机和端口,并创建DatagramPacket的实例来封装数据;

对于UDP接收方对于发送方的限定,使用DatagramSocket的connect方法来设置只监听的目标主机和端口;


HTTP是用于从WWW服务器传输超文本到本地浏览器的传送协议

HTTP的客户端一定是浏览器,所以客户端不用编写,直接用浏览器输入需要访问的服务器的主机和端口即可,点击回车就是发送请求,而主要是编写服务器端;

请求消息的格式元素:Method,Request-URI,HTTP/Version,而响应消息格式:HTTP/Version,Status(2正常,3半正常,4客户端有问题,5服务器有问题),Description;HTTP的连接是建立在TCP上的,也就是说要先建立TCP连接;

对于服务器端的编写,和TCP服务器的编写基本一样,区别在于在创建ServerSocket的实例时,不用去指定监听的地址,只需要写端口,默认是所有端口都可以响应,另外的区别是返回的内容,需要返回的是符合网页格式的脚本语言,服务器在接收到已经写有这些格式的流(本来就是发送一个流过去,还是原来的流)后,就会翻译成网页的格式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值