TCP/UDP协议,远程链接与控制

本文详细介绍了如何使用TCP和UDP协议实现远程控制。对于TCP远程控制,文章讲解了客户端和服务端的具体实现过程,包括建立连接、数据传输及屏幕截图等步骤;而对于UDP远程控制,则演示了数据包的发送与接收流程。此外,还对比了TCP和UDP的特点及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[align=center][b][size=small][color=red]TCP远程控制[/color][/size][/b]


[size=small][color=red]TCP协议:是可靠的,面向对象的,但是传输效率比较低
[/color][/size]
[size=small][color=red]使用Socket类
会使用ServerSocket类
[/color][/size]
[size=small][color=red]TCP客户端:[/color][/size]
用来发送请求,再显示远程桌面面板,面板要有要连接IP地址,端口号。再给按钮添

加监听器

MyListener mlis =new MyListener();
btn.addActionListener(mlis);

//按钮监听器
class MyListener implements ActionListener{

@Override
public void actionPerformed(ActionEvent e){
//获得Ip@端口
String ip = ipField.getText();
String port = portField.getText();

int intPort = Integer.parseInt(port);

try{
//创建客户端套接字,连接服务端
Socket socket =new Socket(ip,intPort);
//不停的接受服务端发来的图片
RecieveThread rt =new RecieveThread(socket,panel);
rt.start();
}catch(Exception e1){
//弹出错误提示框
JOptionPane.showMessageDialog(null,"网络异常,无法连接服务器!");
e1.printStackTrace();
}
}
}
}
// 从Socket上获得输入流
InputStream ips = socket.getInputStream();
// 由于接受的是对象流
ObjectInputStream ois = new ObjectInputStream(ips);
while (true) {
// 读取对象,由于发送的是ImageIcon,这里可以强制转型成ImageIcon
Object obj = ois.readObject();
ImageIcon icon = (ImageIcon) obj;

//获得图像大小(即为服务端桌面大小)
int width = icon.getIconWidth();
int height = icon.getIconHeight();

//修改panel大小为服务端桌面大小
panel.setPreferredSize(new Dimension(width,height));
//获得画布
Graphics g = panel.getGraphics();
g.drawImage(icon.getImage(), 0,0, null);
[size=small][color=red]
TCP服务端:[/color][/size]

[size=small][color=red]接收客服端的请求[/color][/size]:

// 初始化服务端的方法
public void initServer() throws IOException {
// 创建服务端套接字对象
ServerSocket server = new ServerSocket(10010);

System.out.println("服务器已经启动,等待连接");

// 等待客户端连接,如果有客户端连接上,会收到客户端套接字
Socket socket = server.accept();
System.out.println("一个客户端连上了"+socket.getRemoteSocketAddress());
// 启动一个线程来给客户端发送服务端桌面
SendThread st = new SendThread(socket);
st.start();

//从套接字上获得输出流
OutputStream ops = socket.getOutputStream();
//包装成对象流
ObjectOutputStream oos = new ObjectOutputStream(ops);

// 创建一个机器人对象,用来截屏
Robot robot = new Robot();

while (true) {
// 获得屏幕的分辨率
Toolkit tool = Toolkit.getDefaultToolkit();
Dimension dim = tool.getScreenSize();

// 要截取的起始点
Point p = new Point(0, 0);

// 指定截取的区域
Rectangle rect = new Rectangle(p, dim);

// 开始截屏,获得截取到的图像
BufferedImage img = robot.createScreenCapture(rect);

//由于BufferedImage没有实现序列化,不能写到IO中
//将BufferedImage包装成可写入IO的图像对象
ImageIcon icon = new ImageIcon(img);

//写出对象
oos.writeObject(icon);
oos.flush();


[size=small][color=red][b]UDP的传输:[/b][/color][/size]
[b][size=small][color=red]UDP发送数据:[/color][/size][/b]
public static void main (String[] args)throws Exception {
//发件人的地址与发件人实例化
SocketAddress sendAdd = new InetSocketAddress("127.0.0.1",9091);
//收件人的地址
SocketAddress address = new InetSocketAddress("127.0.0.1",9090);
//用来发送数据包的套接字(快递员)
DatagramSocket socket = new DatagramSocket(sendAdd);

int num =0 ;
while(true){
num++;


String ems="我是快递UDP";
byte[] bnf= ems.getBytes();//吧字符串转换成字节类型
Thread.sleep(1000);

//创建一个要发送的数据包(包裹)
DatagramPacket packet =new DatagramPacket(bnf, bnf.length, address);
//发送数据包
socket.send(packet);

[b][size=small][color=red]UDP接收数据:[/color][/size][/b]


//接受方的地址
SocketAddress receiveAdd= new InetSocketAddress ("127.0.0.1",9090);
//创建接收数据的套接字(快递员)
DatagramSocket socket = new DatagramSocket(receiveAdd);

int num =0;
while(true){
num++;
Thread.sleep(1000);
byte [] buf = new byte[1024];
//创建数据包对象
DatagramPacket packet =new DatagramPacket(buf ,buf.length);

//接收数据包,数据就会被存在buf数组中
socket.receive(packet);
String str = new String(buf);
System.out.println(str.trim());[/align]
[b][size=small][color=red]
总结:tcp协议和udp协议的区别
TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
应用场合 传输大量数据 少量数据
速度 慢 快[/color][/size][/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值