JAVA复习笔记--------网络编程

网络部分就是关于Java如何封装数据在网络中传输的应用。避开所有的硬件设施不谈,我们所关心的是如何利用已有的资源去传输我们的数据。我们要想利用Java所封装的类,就要弄清楚如何使用IP地址,端口号,以及协议。IP地址是网络中设备的标识;而端口号用于标识各个进程;传输协议则是通讯的规则。常见的协议有协议:TCP, UDP

在介绍数据传输过程之前,我们要了解TCP和UDP的区别。UDP将数据及源和目的封装成数据包中,不需要建立连接,每个数据报的大小在限制在64k内,因无连接,是不可靠协议,不需要建立连接,所以速度快。TCP是建立连接,形成传输数据的通道。在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接,效率会稍低。
l 在网络通信中,我们使用Socket网络服务来获取通信服务。通信的两端都有Socket,网络通信其实就是Socket间的通信,Socket中包括IP地址和端口号,数据在两个Socket间通过IO传输。由于TCP和UDP的特点和提供的服务不同。

对于UDP传输,用到的封装类是:DatagramSocket与DatagramPacket,步骤为:建立发送端,接收端;建立数据包。调用Socket的发送接收方法。关闭Socket。
发送端与接收端是两个独立的运行程序。很显然发送端和接收端的运行的程序不同。发送端,在发送端,要在数据包对象中明确目的地
IP及端口。
    DatagramSocket ds = new DatagramSocket();
    byte[] by = “hello,udp”.getBytes();
    DatagramPacket dp = new DatagramPacket(by,0,by.length,
    InetAddress.getByName(“127.0.0.1”),10000);
    ds.send(dp);
    ds.close();
在接收端,要指定监听的端口就可以了,并不需要IP地址。
    DatagramSocket ds = new DatagramSocket(10000);
    byte[] by = new byte[1024];
    DatagramPacket dp = new DatagramPacket(by,by.length);
    ds.receive(dp);
    String str = new String(dp.getData(),0,dp.getLength());
    System.out.println(str+"--"+dp.getAddress());
    ds.close();
对于TCP传输,要用到Socket和ServerSocket,同样地,主要的具体步骤为:建立客户端和服务器端;建立连接后,通过Socket中的IO流进行数据的传输;关闭socket。同样,客户端与服务器端是两个独立的应用程序。对于客户端,客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异常。连接成功,说明客户端与服务端建立了通道,那么通过IO流就可以进行数据的传输,而Socket对象已经提供了输入流和输出流对象,通过getInputStream(),getOutputStream()获取即可。与服务端通讯结束后,关闭Socket。对于服务端服务端需要明确它要处理的数据是从哪个端口进入的。当有客户端访问时,要明确是哪个客户端,可通过accept()获取已连接的客户端对象,并通过该对象与客户端通过IO流进行数据传输。当该客户端访问结束,关闭该客户端。客户端通过Socket建立对象并指定要连接的服务端主机以及端口:
    Socket s = new Socket(“192.168.1.1”,9999);
    OutputStream out = s.getOutputStream();
    out.write(“hello”.getBytes());
    s.close();
服务端建立服务端需要监听一个端口:
    ServerSocket ss = new ServerSocket(9999);
    Socket s = ss.accept ();
    InputStream in = s.getInputStream();
    byte[] buf = new byte[1024];
    int num = in.read(buf);
    String str = new String(buf,0,num);
    s.close();
    ss.close();
对于Web服务器而言,当有多个客户端同时访问服务器时,服务端又如何提供服务呢?先前的服务端有个局限性。当第一个客户端连接上以后,被服务端获取到,服务端执行具体流程。这时后面的客户端连接,只有等待。因为服务端还没有处理完先前客户端的请求,还有循环回来执行下次accept方法。所以暂时获取不到B客户端对象。那么为了可以让多个客户端同时并发访问服务端。那么服务端最好就是将每个客户端封装到一个单独的线程中,这样,就可以同时处理多个客户端请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值