当前位置:编程学习 > JAVA >>

黑马程序员-java网络编程

Java网络编程(即所谓的socket编程),在通信的2个端点之间都有socket,数据就是在这2个socket之间通过IO进行传输的,网络模型主要有:1.OSI参考模型(应用层->表示层->会话层->传输层->网络层->数据链路层->物理层),2.TCP/IP参考模型(应用层->传输层->网际层->主机至网络层)
      网络的通讯要素有:1.IP地址  2.端口号   3.传输协议,这里主要说一下传输协议,协议主要分为2大类(UDP和TCP),它们都是互联网的传输协议,而不同之处主要表现在数据的安全性和完整性方面:
      UDP协议是面向无连接的协议,同TCP协议相比是一个不安全的数据传输协议。UDP数据包中的验证信息要比TCP协议少的多。所以对数据安全性和完整性的验证就没有TCP协议安全了,相对TCP的大数据量传输,UDP的每个数据包限制在64k内,因为是不可靠的协议,故不需要建立连接,所以速度较快。
      TCP协议是面向连接的协议,所以是一个安全的数据传输协议,当在校验的过程中发现数据传输错误的话,会立即进行数据的重传,以保证数据的正确性和完整性,是个安全的数据传输协议,此外TCP可以进行大数据量的传输,因为是可靠协议,故必须建立连接,所以在效率方面相对UDP而言会稍低些。
    
      通过UDP协议进行简单的网络传输:
      发送端的代码
    
Java代码 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
 
public class UdpSend { 
    public static void main(String[] args) throws Exception { 
        // 1.创建udp服务,通过DatagramScoket对象 
        DatagramSocket ds = new DatagramSocket(); 
 
        // 2.确定数据,并封装成数据包,DatagramPacket(byte[] buf, int length, InetAddress 
        // address, int port) 
        byte[] buf = "以udp形式发送的数据".getBytes(); 
        DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress 
                .getByName("127.0.0.1"), 10000); 
 
        // 3.通过socket服务,将已有的数据包发送出去,通过send方法 
        ds.send(dp); 
 
        // 4.关闭资源 
        ds.close(); 
    } 

 
     接收端代码
 
Java代码 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
 
public class UdpReceive { 
    public static void main(String[] args) throws Exception { 
        // 1.创建udp socket,建立端口 
        DatagramSocket ds = new DatagramSocket(10000); 
 
        // 2.定义数据包,用于存储数据 
        byte[] buf = new byte[1024]; 
        DatagramPacket dp = new DatagramPacket(buf, buf.length); 
 
        // 3.通过服务的recieve方法将收到的数据存入数据包中 
        ds.receive(dp); //阻塞式方法 
 
        // 4.通过数据包的方法获取其中的数据 
        String ip = dp.getAddress().getHostAddress(); 
        String data = new String(dp.getData(), 0, dp.getLength()); 
        int port = dp.getPort(); 
        System.out.println(ip + "::" + data + "::" + port); 
         
        //5.关闭资源 
        ds.close(); 
    } 

 
      通过TCP协议进行简单的网络传输:
      服务器端代码
    
Java代码 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
 
public class TcpServer { 
    public static void main(String[] args) throws Exception { 
        //建立服务端socket,并监听一个端口 
        ServerSocket ss = new ServerSocket(9999); 
         
        //通过accept方法获取连接过来的客户端对象 
        Socket s = ss.accept(); 
        String ip = s.getInetAddress().getHostAddress(); 
        System.out.println(ip + ".....connected"); 
         
        //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据 
        InputStream in = s.getInputStream(); 
         
        byte[] buf = new byte[1024]; 
        int len = in.read(buf); 
         
        System.out.println(new String(buf, 0, len)); 
         
        s.close();       
        ss.close(); 
    } 

   
    客户端代码
  
Java代码 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
 
public class TcpClient { 
    public static void main(String[] args) throws Exception { 
        //创建客户端socket服务,指定目的主机和端口 
        Socket s = new Socket("127.0.0.1", 9999); 
         
        //为了发送数据,应该获取socket流中的输出流 
        OutputStream out = s.getOutputStream();      
        out.write("以tcp形式发送的数据".getBytes()); 
        s.close(); 
    } 

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,