TCP/UDP协议,远程链接与控制_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > TCP/UDP协议,远程链接与控制

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

 2014/10/10 15:59:46  aikon218  程序员俱乐部  我要评论(0)
  • 摘要:TCP远程控制TCP协议:是可靠的,面向对象的,但是传输效率比较低使用Socket类会使用ServerSocket类TCP客户端:用来发送请求,再显示远程桌面面板,面板要有要连接IP地址,端口号。再给按钮添加监听器MyListenermlis=newMyListener();btn.addActionListener(mlis);//按钮监听器classMyListenerimplementsActionListener{@OverridepublicvoidactionPerformed
  • 标签:协议 远程
TCP远程控制


TCP协议:是可靠的,面向对象的,但是传输效率比较低

使用Socket类
会使用ServerSocket类

TCP客户端:
用来发送请求,再显示远程桌面面板,面板要有要连接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);

TCP服务端:


接收客服端的请求

// 初始化服务端的方法
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();


UDP的传输:
         UDP发送数据:
         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);

          UDP接收数据:


//接受方的地址
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());

总结:tcp协议和udp协议的区别
               TCP    UDP
     是否连接 面向连接 面向非连接
     传输可靠性 可靠 不可靠
     应用场合 传输大量数据 少量数据
     速度        慢     快
上一篇: Redis3.0官方文档翻译计划(4) ——从入门到精通(中) 下一篇: 没有下一篇了!
发表评论
用户名: 匿名