Socket网络编程

URLDemo.java

public class URLDemo {
    public static void main(String[] args) throws MalformedURLException {
        URL url = new URL("https://www.baidu.com/s?wd=java");
        System.out.println("URL为:"+url.toString());
        System.out.println("协议为:"+url.getProtocol());
        System.out.println("验证信息:"+url.getAuthority());
        System.out.println("文件名及请求参数:"+url.getFile());
        System.out.println("主机名:"+url.getHost());
        System.out.println("路径:"+url.getPath());
        System.out.println("端口:"+url.getPort());
        System.out.println("默认端口:"+url.getDefaultPort());
        System.out.println("请求参数:"+url.getQuery());
        System.out.println("定位位置:"+url.getRef());
    }
}

URLConnDemo.java

public class URLConnDemo {
    public static void main(String[] args) throws IOException {
        URL url = new URL("http://www.baidu.com");
        URLConnection urlConnection = url.openConnection();
        HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
        InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream());
        BufferedReader in = new BufferedReader(inputStreamReader);
        String urlString = "";
        String current;
        while ((current = in.readLine()) != null){
            urlString += current + "\n";
        }
        System.out.println(urlString);
    }
}

TCP服务端.java


public class TCP服务端 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);

        System.out.println("开始进行网络适配。。。");
        //创建一个服务端的网络套接字,端口是9999
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("正在进行网络适配。。。。");
        Socket s = ss.accept();//等待接收

        OutputStream outputStream = s.getOutputStream();
        InputStream inputStream = s.getInputStream();


        new TCP输入(outputStream,scanner).start();
        new TCP读取(inputStream,"客户端:").start();

        /*while(true){
            String s1 = scanner.next();
            outputStream.write(s1.getBytes());
            if (s1.equals("exit")){//当结束时
                outputStream.close();
            }

            System.out.println("客户端:");
            if (inputStream!=null){
                byte[] bytes = new byte[1024];
                int len = inputStream.read(bytes);
                String s2 = new String(bytes,0,len);
                System.out.println(s2);
            }
            if (outputStream==null){
                inputStream.close();
            }
        }*/
    }
}

TCP客户端.java

public class TCP客户端 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);

        //产生一个客户端的套接字
        Socket s = new Socket("192.168.43.42",9999);//执行了相当于我向你发送请求了
        OutputStream outputStream = s.getOutputStream();
        InputStream inputStream = s.getInputStream();

        new TCP输入(outputStream,scanner).start();
        new TCP读取(inputStream,"服务端:").start();


        /*while (true){
            String s1 = scanner.next();
            outputStream.write(s1.getBytes());
            outputStream.flush();
            if (s1.equals("exit")){
                outputStream.close();
            }


            byte[] bytes = new byte[1024];
            if(inputStream!=null){
                int len = inputStream.read(bytes);
                String s2 = new String(bytes,0,len);
                System.out.println(s2);
            }
            if (outputStream==null){
                inputStream.close();
            }
        }*/
    }
}

/*
BIO:Blocking IO(阻塞式IO)
 */

TCP读取.java


//只负责读取
public class TCP读取 extends Thread {
    private InputStream in;
    private String type;

    public TCP读取(InputStream in,String type){
        this.in = in;
        this.type = type;
    }

    @Override
    public void run() {
        while (true){
            try{
                byte[] bytes = new byte[1024];
                int len = in.read(bytes);
                String str = new String(bytes,0,len);
                System.out.println(type+":"+str);
                if (str.equals("exit")){
                    break;
                }
            }catch(Exception e){
                System.out.println(e.getMessage());
            }
        }
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

TCP输入.java


//只负责输入
public class TCP输入 extends Thread{
    private OutputStream outputStream;
    private Scanner scanner;

    public TCP输入(OutputStream outputStream,Scanner scanner) {
        this.outputStream = outputStream;
        this.scanner = scanner;
    }

    @Override
    public void run() {
        String s = null;
        while (true){
            s = scanner.next();
            try {
                outputStream.write(s.getBytes());
                outputStream.flush();
                if (s.equals("exit")){
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try{
            outputStream.close();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

UDP服务端.java

public class UDP服务端 {
    public static void main(String[] args) throws IOException {
        //1.创建服务器端DatagramSocket,指定端口
        DatagramSocket socket = new DatagramSocket(8888);
        //2.创建数据报,用于接收客户端发送的数据
        byte[] bytes = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bytes,bytes.length);
        //接收客户端发送的数据
        System.out.println("***服务器已经启动,等待客户端发送数据");
        socket.receive(packet);//此方法在接收到数据报之前会一直阻塞
        //4.读取数据
        String info = new String(bytes,0,packet.getLength());
        System.out.println("我是服务器,客户端说:"+info);
    }
}

UDP客户端.java

public class UDP客户端 {
    public static void main(String[] args) throws IOException {
        //1.定义服务器的地址、端口号、数据
        InetAddress address = InetAddress.getByName("localhost");
        DatagramSocket socket = new DatagramSocket();
        byte[] bytes = "666".getBytes();
        DatagramPacket packet = new DatagramPacket(bytes,bytes.length,address,8888);
        socket.send(packet);
        //3.创建DatagramSocket对象
        /*DatagramSocket socket = new DatagramSocket();
        socket.receive(packet);
        //4.读取数据
        String info = new String(bytes,0,packet.getLength());
        System.out.println("我是客户端,服务端说:"+info);*/
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值