java 网络编程

网络:将不同区域的计算机链接到一起   局域网、城域网、互联网

IP地址:网络中的每个设备都会有一个唯一的数字标识 就是IP地址;一个IP地址可以对应多个域名,一个域名只能对应一个IP地址

端口:用于区分计算机上的软件      占2个字节 在0-65535之间     同一个网络协议端口号不能相同   1024以下的端口号是预留给服务商的最好不要使用

URI(uniform resource identifier):统一资源标识符,用来唯一的标识一个资源,是一个抽象的概念。http://主机名:8080/Token/index.do,

                                         getRequestURI 返回的是一个String 类型的字符串(/Token/index.do)返回一个相对路径。

URL(uniform resource locator):URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

                                              getRequestURL 返回一个StringBuffer类型(http://主机名:8080/Token/index.do)是一个绝对路径。          

URL=协议+存放资源的主机域名+端口+资源文件

数据传输的协议

  TCP协议:先建立链接 再进行数据传输  安全 效率低  面向链接;确保接收方完全正确地获取发送方所发送的全部数据;

         TCP没有数据大小方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。

  UDP协议:相互通信时无需建立链接  效率高 ; 发送方所发送的数据报并不一定以相同的次序到达接收方;

           UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。

数据传输: 先封装   后拆装  

一、网络编程

  1、UDP

     客户端:

            a、创建客户端 DatagramSocket

     b、准备数据  字节数组

     c、打包 DatagramPacket +服务器地址+端口

     d、发送

     e、关闭资源

  服务器:   

            a、创建服务器 DatagramSocket

     b、准备接收容器  字节数组 封装DatagramPacket

     c、封装成包 接受数据

     d、分析 数据

     e、关闭资源

public class ServerTest {
    public static void main(String[] args) throws IOException {
        //1.创建服务器+端口
        DatagramSocket server=new DatagramSocket(8888);
        //2.准备接收容器
        byte []container=new byte[1024];
        //3、封装成包 DatagramPacket
        DatagramPacket packet=new DatagramPacket(container, container.length);
        //4、接收数据
        server.receive(packet);
        //5、分析数据
        byte [] data=packet.getData();
        int len =packet.getLength();
        System.out.println(new String(data,0,len));
        //6、释放资源
        server.close();
        
    }
}


public class ClientTest {
    public static void main(String[] args) throws IOException {
        //1.创建客服端+端口
        DatagramSocket client=new DatagramSocket(6666);
        //2、准备数据
        String msg="UDP编程  ======》 我是客户端";
        byte[]data=msg.getBytes();
        //3、打包数据   发送给指定地点+端口
        DatagramPacket packet=new DatagramPacket(data, data.length,new InetSocketAddress("localhost",8888));
        //4、发送
        client.send(packet);
        //释放资源
        client.close();
    }
}
View Code

 2、TCP

public class TCPServer {
    public static void main(String[] args) throws IOException {
        //创建服务器 指定端口 
        ServerSocket server=new ServerSocket(8888);
        //接收客户端链接  阻塞式
        Socket socket=server.accept();
        System.out.println("一个客户端建立链接");
        //发送数据+接收数据
        String msg="欢迎使用";
        //输出流
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write(msg);
        bw.newLine();//行结束符 
        bw.flush();
    }
//输出  一个客户端建立链接

public class TCPClient {
    public static void main(String[] args) throws UnknownHostException, IOException {
        //指定服务器+端口
        Socket client=new Socket("localhost",8888);
        //接收数据
        BufferedReader bd=new BufferedReader(new InputStreamReader(client.getInputStream()));
        String echo=bd.readLine();
        System.out.println(echo);
        bd.close();
    }
}
//输出    欢迎使用
View Code
原文地址:https://www.cnblogs.com/jalja/p/4598604.html