Socket

数据传输

通过获取到对应的I/O流进行网络数据传输

//服务端
public static void main(String[] args) {
        try(ServerSocket server = new ServerSocket(8080)) {
            System.out.println("服务端启动成功!!!");
            Socket socket = server.accept();
            System.out.println("客户端已连接,IP地址为:"+socket.getInetAddress().getHostAddress());
            System.out.println("读取的客户端数据:");
            InputStream stream = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream));//InputStreamReader的作用是将字节流转换为字符流,然后BufferedReader在这个字符流的基础上提供了缓冲功能,使得字符读取操作更加高效。
            System.out.println(reader.readLine());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
//客户端
    public static void main(String[] args) {
        try(Socket socket = new Socket("localhost",8080)) {
            System.out.println("成功连接到服务端!!!");
//            OutputStream outputStream = socket.getOutputStream();
//            Scanner sc = new Scanner(System.in);
//            String ss = sc.nextLine();
//            outputStream.write(ss.getBytes());
//            outputStream.flush();
/*上面的方法是获取输出流,然后将输入的数据传到输出流中,并更新*/
            OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
//OutputStreamWriter对象,用于将字符数据转换为字节数据并发送到指定的Socket输出流中。
            Scanner sc = new Scanner(System.in);
            osw.write(sc.nextLine()+"\n");
            //readLine方法会一直读取字符,直到遇到换行符,然后将换行符之前的字符作为一个字符串返回。例如,如果输入是“Hello\nWorld”,第一次调用readLine会返回“Hello”,并且会忽略换行符。所以要加上换行符
            osw.flush();
            System.out.println("数据已发送.....");
        } catch (IOException e) {
            System.out.println("服务端连接失败!!!");
            throw new RuntimeException(e);
        }
    }

文件传输

使用try-with-resources语句可以在括号内声明ServerSocketSocket,会在try块结束时自动关闭资源,无需显式调用close方法。这是因为ServerSocket类实现了AutoCloseable接口,该接口允许资源在try块结束时自动关闭。

//服务端
public static void main(String[] args) {
        try(ServerSocket server = new ServerSocket(7878)) {
            System.out.println("服务器启动成功!!!");
            Socket socket = server.accept();/*server.accept()是一个阻塞方法,它会等待客户端的连接请求,并在有客户端连接时返回一个新的Socket对象,该对象代表了与客户端的连接。这个新的Socket对象可以用来与客户端进行通信,例如发送和接收数据。*/
            InputStream stream = socket.getInputStream();//获取输入流
            FileOutputStream fileOutputStream = new FileOutputStream("net/data.txt");//获取文件输出流,指定输出目录
            byte[] bytes = new byte[1024];
            int len;
            while ((len = stream.read(bytes)) != -1) {
                fileOutputStream.write(bytes, 0, len);
            }
            fileOutputStream.flush();
            fileOutputStream.close();
        } catch (IOException e) {
            System.out.println("服务器启动失败!!!");
            e.printStackTrace();
        }
    }
//客户端
public static void main(String[] args) {
        try(Socket socket = new Socket("localhost",7878)) {
            System.out.println("成功连接服务端!!!");
            FileInputStream fileInputStream = new FileInputStream("test.txt");//获取文件输入流,客户端要发送的文件
            OutputStream outputStream = socket.getOutputStream();
            byte[] bytes = new byte[1024];
            int len;
            while ((len = fileInputStream.read(bytes)) != -1) {
                outputStream.write(bytes,0,len);//读取文件输入流的数据并写入输出流
            }
            fileInputStream.close();
            outputStream.flush();
        } catch (IOException e) {
            System.out.println("服务端连接失败!!!");
            e.printStackTrace();
        }
    }

浏览器访问服务端

//服务端
public static void main(String[] args) {
        try(ServerSocket server = new ServerSocket(8080)) {
            System.out.println("服务端启动成功.....");
            Socket socket = server.accept();
            System.out.println("客户端已连接,IP为:" + socket.getInetAddress().getHostAddress());
            InputStream stream = socket.getInputStream();
            System.out.println("接收到的客户端数据为:");
            while(true) {
                int data = stream.read();
                if(data == -1) {break;}
                System.out.print((char)data);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

通过浏览器访问,在地址栏输入http://localhost:8080/localhost代表本地地址,8080是服务端的端口号,浏览器访问后会向服务端发送请求,但是因为服务端没写响应的部分,所以浏览器收不到响应会显示错误。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇