Java高级特性中的网络编程


前言

一、基于TCP的socket编程

1.建立服务器和客户端之间的连接

建立服务器端

package hello;

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

public class Server {

    public static void main(String[] args) throws IOException {
        //建立服务器,ip默认本地ip,赋值一个端口
        ServerSocket serverSocket=new ServerSocket(9999);
        //实时等待接收
        Socket socket = serverSocket.accept();
        //创建读入流
        InputStream inputStream = socket.getInputStream();
        byte [] arr=new byte[1024];
        int len;
        if((len=inputStream.read(arr))!=-1){
            String s=new String(arr,0,len);
            System.out.println(s);
        }
        //关流
        inputStream.close();
        System.out.println("接收成功");
    }
}

建立客户端

package hello;

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

public class Client {

    public static void main(String[] args) throws IOException {
        //建立客户端
        Socket socket=new Socket("127.0.0.1",9999);  //ip地址和端口号,注意服务器端和客户端保持一致
        //创建流,发送
        OutputStream outputStream = socket.getOutputStream();
        String str=new String("我是客户端");
        outputStream.write(str.getBytes());
        //关流
        outputStream.close();
        //关客户端
        socket.close();

    }
}

2.创建可视化窗口

1.创建窗口

package frame;

import javax.swing.*;
/**
 * 第一步  设置窗口
 * */
public class demoFrame extends JFrame {

    demoPanel panel=new demoPanel();

    public demoFrame(){
        super.setTitle("窗口");
        super.setSize(800,600);  //设置窗口大小
        super.setLocationRelativeTo(null);  //窗口的相对位置
        super.add(panel);  //给窗口增加画板
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //关闭窗口就会终止程序
        super.setVisible(true);  //显示窗口
    }

}

2.添加画布

package frame;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 第二步  添加画布
 * */
public class demoPanel extends JPanel {

    BufferedImage image=null;

    public demoPanel(){
        try {
            File file=new File("1.png");  //该图片为窗口背景
            image=ImageIO.read(file);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    //用来接收客户端的请求,对应案例中的客户端
    public void startServer(){
        try {
            ServerSocket serverSocket=new ServerSocket(8989);
            while (true){
                Socket socket=serverSocket.accept();
                InputStream inputStream= socket.getInputStream();
                image=ImageIO.read(inputStream);
                //重写绘制
                repaint();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    //增加画笔
    @Override
    public void paint(Graphics g) {
        g.drawImage(image,0,0,image.getWidth(),image.getHeight(),null);
    }
}

3.测试

package frame;

public class demoTest {
    public static void main(String[] args) {
        demoFrame frame=new demoFrame();
        frame.panel.startServer();
    }
}

二、综合案例

远程桌面的实现

1.创建一个客户端

package hello;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client2 {

    public static void main(String[] args) throws IOException, AWTException, InterruptedException {
            while (true){
                    //截图
                    //获取屏幕大小
                    Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
                    //转成矩形
                    Rectangle screenRectangle=new Rectangle(screenSize);
                    //机器人类
                    Robot robot=new Robot();
                    //截屏
                    BufferedImage image=robot.createScreenCapture(screenRectangle);
                    //发送服务器
                    ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
                    ImageIO.write(image,"png",byteArrayOutputStream);
                    //BufferedImage  转成字节数组
                    byte[] bytes= byteArrayOutputStream.toByteArray();
                    Socket socket=new Socket("192.168.7.33",8989);
                    OutputStream outputStream = socket.getOutputStream();
                    //写字节数组
                    outputStream.write(bytes);
                    Thread.sleep(1);
            }

    }
}

2.必须先启动服务器端,即可视化窗口中的测试类,然后再启动客户端
在这里插入图片描述
3.我们可以发现窗口中的桌面已经出来了
在这里插入图片描述

总结

网络编程在我们的开发过程中用的不多,主要是用于两个主机之间建立连接和发送文件的,多多学习对我们的开发有一定的帮助。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值