Java网络编程学习笔记

InetAddress

知道有这么一个类InetAddress
此类表示Internet协议(IP)地址。
IP地址是由IP使用的32位或128位无符号数字,构建UDP和TCP协议的低级协议

UDP 发送

UDP 发送

package blog.fundmental.javaNet.demo;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 20:47
 */
public class UdpSend {
    public static void main(String[] args) throws Exception{
        //1.创建UDP服务,通过DatagramSocket对象
        DatagramSocket ds = new DatagramSocket();
        //2.确定数据,封装成数据包
        byte[] buf = "udp is not reliable data transfer protocol".getBytes();
        DatagramPacket dp = new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.1.210"),9999);
        //3.通过socket服务,将数据包发出去
        ds.send(dp);
        //4.关闭资源
        ds.close();
    }
}

UDP接收

package blog.fundmental.javaNet.demo;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 20:53
 */
public class UdpReceiver {

    public static void main(String[] args) throws Exception{
        //1.创建udp socket服务
        DatagramSocket ds = new DatagramSocket(9999);
        //2.定义数据包,用于存储数据
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf,buf.length);
        //3.通过服务的receiver方法将数据存入数据包中
        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:"+ip+" data:"+data+" port:"+port);
        //5.关闭资源
    }
}

结果
在这里插入图片描述

UDP控制台输入单边通讯

package blog.fundmental.javaNet.demo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 21:10
 */
public class UdpSend2 {
    public static void main(String[] args) throws Exception {
        DatagramSocket ds = new DatagramSocket();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while( (line=br.readLine())!=null){
            if("886".equals(line)){
                break;
            }
            byte[] buf = line.getBytes();
            DatagramPacket dp = new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.1.210"),10000);
            ds.send(dp);
        }
        ds.close();
    }
}

package blog.fundmental.javaNet.demo;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 21:10
 */
public class UdpReceiver2 {
    public static void main(String[] args) throws Exception {
        DatagramSocket ds = new DatagramSocket(10000);
        while(true){
            byte[] buf = new byte[1024];
            DatagramPacket dp = new DatagramPacket(buf,buf.length);
            ds.receive(dp);
            String ip = dp.getAddress().getHostAddress();
            String data = new String(dp.getData(),0,dp.getLength());
            int port = dp.getPort();
            System.out.println("ip:"+ip+" data:"+data+" port:"+port);
        }
    }
}

结果
在这里插入图片描述
在这里插入图片描述

ChatDemo.java

package blog.fundmental.javaNet.demo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 21:29
 */
public class ChatDemo {
    public static void main(String[] args) throws Exception{
        DatagramSocket sendSocket = new DatagramSocket();
        DatagramSocket receSocket = new DatagramSocket(9999);
        new Thread(new Send(sendSocket)).start();
        new Thread(new Receiver(receSocket)).start();
    }
}

class Send implements Runnable{
    private DatagramSocket ds;
    public Send(DatagramSocket socket){
        this.ds =socket;
    }

    @Override
    public void run() {
        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            while((line=br.readLine())!=null){
                if("bye".equals(line)){
                    break;
                }
                byte[] buf = line.getBytes();
                DatagramPacket dp = new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.1.210"),9999);
                ds.send(dp);
            }
        }catch (Exception e){
            throw new RuntimeException("发送失败");
        }
    }
}

class Receiver implements Runnable{
    private DatagramSocket ds;
    public Receiver(DatagramSocket socket){
        this.ds =socket;
    }

    @Override
    public void run() {
        try{
            while(true){
                byte[] buf = new byte[1024];
                DatagramPacket dp = new DatagramPacket(buf,buf.length);
                ds.receive(dp);
                String ip = dp.getAddress().getHostAddress();
                String data = new String(dp.getData(),0,dp.getLength());
                System.out.println(ip+":"+data);
            }
        }catch (Exception e){
            throw new RuntimeException("接收失败");
        }
    }
}

在这里插入图片描述

TCP 发送

package blog.fundmental.javaNet.demo;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 22:04
 */
public class TCPServer {
    public static void main(String[] args) throws Exception{
        ServerSocket ss = new ServerSocket(9999);
        Socket s = ss.accept();
        InputStream in = s.getInputStream();
        byte[] buf = new byte[1024];
        int len = in.read(buf);
        String ip = s.getInetAddress().getHostAddress();
        System.out.println(ip+"......connected");
        System.out.println(new String(buf,0,len));
        s.close();
        ss.close();
    }
}

package blog.fundmental.javaNet.demo;

import java.io.OutputStream;
import java.net.Socket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 21:59
 */
public class TCPClient {
    public static void main(String[] args) throws Exception{
        Socket s = new Socket("192.168.1.210",9999);
        OutputStream out = s.getOutputStream();
        out.write("tcp is reliable transfer protocol".getBytes());
        s.close();
    }
}

结果
在这里插入图片描述

TCP Sokect一来一回

package blog.fundmental.javaNet.demo;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 22:12
 */
public class TCPServer2 {
    public static void main(String[] args) throws Exception{
        ServerSocket ss = new ServerSocket(9999);
        Socket s = ss.accept();
        InputStream in = s.getInputStream();
        String ip = s.getInetAddress().getHostAddress();
        System.out.println(ip+"...connected");
        byte[] buf = new byte[1024];
        int len = in.read(buf);
        System.out.println(new String(buf,0,len));

        OutputStream out = s.getOutputStream();
        out.write("服务端对客户端说,你为啥不知道呀".getBytes());
        s.close();
        ss.close();
    }
}

package blog.fundmental.javaNet.demo;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/1 22:09
 */
public class TcpClient2 {
    public static void main(String[] args) throws Exception {
        Socket s = new Socket("192.168.1.210",9999);
        OutputStream out = s.getOutputStream();
        out.write("客户端对服务端说什么也不知道".getBytes());

        InputStream in = s.getInputStream();
        byte[] buf = new byte[1024];
        int len = in.read(buf);
        System.out.println(new String(buf,0,len));
        s.close();
    }
}

结果
在这里插入图片描述
在这里插入图片描述

Soekt 上传文本文件

package blog.fundmental.javaNet.demo;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/3 20:15
 */
public class TransFileServer {
    public static void main(String[] args) throws Exception {
        ServerSocket ss = new ServerSocket(9999);
        Socket s = ss.accept();
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        PrintWriter out = new PrintWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\copy.txt"),true);
        String line = null;
        while((line=br.readLine())!=null){
//            if("上传完成".equals(line))break;
            out.println(line);
        }
        PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
        pw.println("上传成功");
        out.close();
        s.close();
        ss.close();
    }
}

package blog.fundmental.javaNet.demo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * 将客户端文件拷贝到服务端
 * @author *cruder
 * @version 1.0
 * @since 2020/12/3 20:09
 */
public class TransFileClient {
    public static void main(String[] args) throws Exception{
        Socket s = new Socket("192.168.1.210",9999);
        BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\Android笔记.txt"));
        PrintWriter out = new PrintWriter(s.getOutputStream(),true);
        String line =null;
        while((line=br.readLine())!=null){
            out.println(line);
        }
//        out.println("上传完成");
        s.shutdownOutput();//关闭客户端输出流,相对于给流中加入一个结束标记-1
        BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str =brIn.readLine();
        System.out.println(str);
        br.close();
        s.close();
    }
}

Socket上传图片

package blog.fundmental.javaNet.demo;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/3 20:35
 */
public class ImageServer {
    public static void main(String[] args) throws Exception{
        ServerSocket ss = new ServerSocket(9999);
        Socket s = ss.accept();
        InputStream in = s.getInputStream();
        FileOutputStream fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\2020-10-02_194149.png");
        byte[] buf = new byte[1024];
        int len = 0;
        while((len=in.read(buf))!=-1){
            fos.write(buf,0,len);
        }
        OutputStream out = s.getOutputStream();
        out.write("上传成功".getBytes());
        fos.close();
        s.close();
        ss.close();
    }
}

package blog.fundmental.javaNet.demo;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/3 20:35
 */
public class ImageClient {
    public static void main(String[] args) throws Exception{
        Socket s = new Socket("192.168.1.210",9999);
        FileInputStream fis = new FileInputStream("D:\\谷歌浏览器下载\\ChMkJleod3mIS252AAK0-SrfVdAAAURJgKRfK4AArUR778.jpg");
        OutputStream out = s.getOutputStream();
        byte[] buf = new byte[1024];
        int len = 0;
        while((len=fis.read(buf))!=-1){
            out.write(buf,0,len);
        }
        //告诉服务端数据已写完
        s.shutdownOutput();
        InputStream in = s.getInputStream();
        byte[] bufIn = new byte[1024];
        int num = in.read(bufIn);
        System.out.println(new String(bufIn,0,num));
        fis.close();
        s.close();
    }
}

自定义服务端,浏览器访问

package blog.fundmental.javaNet.demo;

import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author *cruder
 * @version 1.0
 * @since 2020/12/3 21:07
 */
public class ServerDemo {
    public static void main(String[] args) throws Exception {
        ServerSocket ss = new ServerSocket(9999);
        Socket s = ss.accept();
        System.out.println(s.getInetAddress().getHostAddress()+"connected...");
        PrintWriter out = new PrintWriter(s.getOutputStream(),true);
        out.println("客户端,你好 welcome browser!");
        s.close();
        ss.close();
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值