• Java编程


    一、客户端(Client),服务器(Server)

    1.Java编程的两个概念:ServerSocket,Server。

    2.套接字Socket:服务端和客户端之间通过套接字Socket建立连接,然后进行通信。

    3.ServerSocket和Server的用处:首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会使用方法accept()来接收Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。同时Socket与Socket之间是双向连通的。

    二、客户端读写和服务器读写

    服务端代码

    package com.lovo.chat;
    
    import java.awt.*;
    import java.io.*;
    import java.net.*; import javax.swing.*;
    public class Server extends JFrame { private JTextArea info; private Socket socket;
    //带c参的构造器
    public Server(String title) { super(title); setSize(200, 300);//设置窗口大小
    setLocation(
    200, 300); //设置坐标
    setDefaultCloseOperation(EXIT_ON_CLOSE);//终止程序
    info
    = new JTextArea(); info.setEditable(false);//设置文本框是否能够编辑
    info.setFocusable(
    false);//设置是否聚集焦点
    JScrollPane jsp
    = new JScrollPane(info);//滚动面板
    this.add(jsp, BorderLayout.CENTER); JPanel pnl = new JPanel(new BorderLayout()); final JTextField msg = new JTextField(); // 输入文本框 JButton send = new JButton("发送"); pnl.add(msg, BorderLayout.CENTER); pnl.add(send, BorderLayout.EAST); this.add(pnl, BorderLayout.SOUTH); setVisible(true);//设置是否窗口可见
    startServer();
    // 发送消息到客户端 send.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { BufferedOutputStream out = new BufferedOutputStream(socket .getOutputStream()); out.write((msg.getText() + " ").getBytes()); out.flush(); } catch (IOException ex) { throw new RuntimeException(ex); } } }); } private void startServer() { try { ServerSocket server = new ServerSocket(30001); socket = server.accept(); // 从客户端读 read(); } catch (IOException e) { throw new RuntimeException(e); } } private void read() { try { final BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); new Thread(new Runnable() { @Override public void run() { char[] ch = new char[1024]; int len; try { while (-1 != (len = reader.read(ch))) { info.append(new String(ch, 0, len)); } } catch (IOException e) { throw new RuntimeException(e); } } }).start(); } catch (IOException e) { throw new RuntimeException(e); } } public static void main(String[] args) { new Server("服务器"); } }
     客户端代码
    package com.lovo.chat; import java.awt.
    *; import java.io.*; import java.net.*; import javax.swing.*; public class Client extends JFrame { private JTextArea info; private Socket socket; public Client(String title) { super(title); setSize(200, 300); setLocation(600, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); info = new JTextArea(); info.setEditable(false); info.setFocusable(false); JScrollPane jsp = new JScrollPane(info); this.add(jsp, BorderLayout.CENTER); JPanel pnl = new JPanel(new BorderLayout()); final JTextField msg = new JTextField(); JButton send = new JButton("发送"); pnl.add(msg, BorderLayout.CENTER); pnl.add(send, BorderLayout.EAST); this.add(pnl, BorderLayout.SOUTH); setVisible(true); startClient(); // 发送消息到服务端 send.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { BufferedOutputStream out = new BufferedOutputStream(socket .getOutputStream());//写入要输出的字符
    out.write((msg.getText() + " ").getBytes()); out.flush(); } catch (IOException ex) { throw new RuntimeException(ex); } } }); } private void startClient() { try { socket = new Socket("127.0.0.1", 30001);//设置IP地址和端口号
    // 从服务器读 read(); } catch (UnknownHostException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } private void read() { try { final BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); new Thread(new Runnable() { @Override public void run() { char[] ch = new char[1024]; int len; try { while (-1 != (len = reader.read(ch))) { info.append(new String(ch, 0, len)); } } catch (IOException e) { throw new RuntimeException(e); } } }).start(); } catch (IOException e) { throw new RuntimeException(e); } } public static void main(String[] args) { new Client("客户端");//设置客户端标题
    } }
  • 相关阅读:
    六十:权限提升-MY&MS&ORA等SQL数据库提权
    五十九:权限提升-Win溢出漏洞及AT&SC&PS提权
    五十八:权限提升-网站权限后台漏洞地第三方获取
    在kaili装git与git-lfs
    机器学习中的最优化算法总结
    动态规划及意义
    对于中变量与类的使用感想
    安装awvs教程参照
    kali乱码问题
    linux与Mac互相粘贴存在障碍,可以用这个命令联系起来
  • 原文地址:https://www.cnblogs.com/g398429959/p/4471143.html
Copyright © 2020-2023  润新知