网络编程 续

UDP编程步骤

  发送端

    1、创建一个DatagramSocket

    2、准备发送的数据,并且打包  DatagramPacket

      要指定:发送的数据,长度,接收方的IP,接收方的端口号

    3、通过DatagramSocket的send(数据报)

    4、关闭

  接收端

    1、创建一个DatagramSocket  要指定 监听的端口号

    2、准备一个DatagramPacket,用来接收数据  要指定装数据一个字节数组,以及长度

    3、通过DatagramSocket的receive(数据报)

    4、拆解数据

      通过DatagramPacket对象.getData()数据,DatagramPacket对象.getLength()实际接收的数据长度

    5、关闭

//示例代码
package com.atguigu.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import org.junit.Test;
/*
 * UDP:非面向连接的
 * 
 * 有发送端和接收端两个应用程序
 */
public class TestUDP {
    @Test
    public void send()throws Exception{
        //1、创建Socket
        DatagramSocket ds = new DatagramSocket();
        
        //2、把数据打包成一个数据报,包
        String str = "双十二购物快乐";
        byte[] bytes = str.getBytes();
        InetAddress ip = InetAddress.getByName("192.168.24.71");
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, ip,8989);
        
        //3、通过socket发送出去
        ds.send(dp);
        System.out.println("发送完毕");
        
        //4、释放资源
        ds.close();
    }
    
    @Test
    public void reveive()throws Exception{
        //1、创建Socket
        DatagramSocket ds = new DatagramSocket(8989);//为它指定一个端口号,在端口号一直监听着
        
        //2、先创建一个数据报等着
        byte[] data = new byte[1024];
        DatagramPacket dp  = new DatagramPacket(data, data.length);
        
        //3、准备接受数据,从socket中接收数据,如果此时没有数据,这句代码会阻塞
        ds.receive(dp);
        
        //4、拆出数据
        String str = new String(dp.getData(),0,dp.getLength());
        System.out.println("收到的数据是:" + str);
        
        //5、关闭
        ds.close();
    }
}

URL编程

  在TCP的基础上

    服务器端  Web服务器

    客户端

      1、创建URL的对象  URL url = new URL(网址);

        网址:协议://主机名:端口号/文件路径名?参数名=参数值&参数名=参数值...

        例如:http://localhost:8080/1108web/index.html

        例如:http://localhost:8080/1108web/login?username=xx&password=xx

      2、与服务器建立连接

        InputStream is = url.openStream();

          这种方式只能使用get方法与服务器进行通信

          如果要给服务器传参数只能在网址后面通过?参数名=参数值&参数名=参数值...

        HttpURLConnection tc = (HttpURLConnection)url.openConnection();

          这种方式可以使用post方法与服务器进行通信

            如果要给服务器传数据,那么需要hc.setDoOutput(true);

            然后用OutputStream进行发送数据

      3、处理接收到数据

//示例一
package com.atguigu.url;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
/*
 * tomcat:是一个服务器
 * 浏览器:客户端
 */
public class TestURL {
    public static void main(String[] args) throws Exception{
        //自定义客户端
        
        URL url = new URL("http://192.168.24.71:8080/1108JavaWeb/index.html");
        /*System.out.println("协议:" + url.getProtocol());
        System.out.println("主机名:" + url.getHost());
        System.out.println("端口号:" + url.getPort());
        System.out.println("路径名:" + url.getPath());*/
        
        InputStream input = url.openStream();
        InputStreamReader isr = new InputStreamReader(input);
        BufferedReader br  = new BufferedReader(isr);    
        
        String str ;
        while((str=br.readLine())!=null){
            System.out.println(str);
        }
    }
}
//示例二:get
package com.atguigu.url;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class TestURL2 {
    public static void main(String[] args) throws Exception{
        URL url = new URL("http://192.168.24.71:8080/myweb/login?username=admin&pass=123");
        InputStream input = url.openStream();
        InputStreamReader isr = new InputStreamReader(input);
        BufferedReader br  = new BufferedReader(isr);    
        
        String str ;
        while((str=br.readLine())!=null){
            System.out.println(str);
        }
    }
}
//示例三:post
package com.atguigu.url;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class TestURL3 {
    public static void main(String[] args) throws Exception{
        URL url = new URL("http://192.168.24.71:8080/myweb/login");
        
        HttpURLConnection hc = (HttpURLConnection) url.openConnection();
        
        hc.setDoOutput(true);
        OutputStream output = hc.getOutputStream();
        PrintStream ps = new PrintStream(output);
//        output.write("username=chai&pass=123".getBytes());
        ps.println("username=chai&pass=123");
        
        InputStream input = hc.getInputStream();
        InputStreamReader isr = new InputStreamReader(input);
        BufferedReader br  = new BufferedReader(isr);    
        
        String str ;
        while((str=br.readLine())!=null){
            System.out.println(str);
        }
    }
}
posted @ 2023-03-06 20:59  LuckySnail  阅读(20)  评论(0)    收藏  举报