• tcp程序设计--客户端获取服务器输入输出流


    tcp程序设计--客户端获取服务器输入输出流

    思路:

    第一步:实例化一个ServerSocket对象(服务器套接字),用来等待网络上的请求(也就是等待来连接的套接字)

    第二步:调用accept()方法,返回一个与客户端socket对象相连接的socket对象

    第三步:服务器端socket对象使用getOutputStream方法获得的输出流将指向客户端socket对象使用getInputStream获得的输入流,反之亦然

    服务器端代码:

     1 public class Server {
     2     public static void main(String[] args) {
     3         try {
     4             ServerSocket ss = new ServerSocket(8001);
     5             while (!ss.isClosed()) {
     6                 Socket s = ss.accept();
     7                 OutputStream ops = s.getOutputStream();
     8                 String str = "欢迎进入程序
    编写TCP服务器程序,"
     9                         + "实现创建一个在8001端口上等待的ServerSocket"
    10                         + "对象,当接收到一个客户机的连接请求后,"
    11                         + "程序从与客户机建立了连接的Socket对象中获得输入输出"
    12                         + "流。通过输出流向客户机发送信息。";
    13                 ops.write(str.getBytes());  //将字符串变成byte数组写入
    14                 ops.close();
    15                 s.close();
    16             }
    17             ss.close();
    18         } catch (IOException e) {
    19             e.printStackTrace();
    20         }
    21     }
    22 }

    客户端代码:

     1 public class Client extends JFrame {
     2     
     3     private static final long serialVersionUID = 1L;
     4     private JTextArea textArea;
     5     private JTextField portField;
     6     private JTextField hostField;
     7     
     8     public static void main(String args[]) {
     9         
    10             Client frame = new Client();
    11             frame.setVisible(true);
    12             }
    13     
    14     public Client() {
    15         super();
    16         setBounds(100, 100, 500, 212);
    17         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    18         
    19         final JPanel panel = new JPanel();
    20         panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
    21         getContentPane().add(panel, BorderLayout.NORTH);
    22         
    23         final JLabel label = new JLabel();
    24         label.setText("连接主机:");
    25         panel.add(label);
    26         
    27         hostField = new JTextField();
    28         hostField.setText("localhost");
    29         panel.add(hostField);
    30         
    31         final JLabel label_1 = new JLabel();
    32         label_1.setText("端口:");
    33         panel.add(label_1);
    34         
    35         portField = new JTextField();
    36         portField.setText("8001");
    37         panel.add(portField);
    38         
    39         final JButton button = new JButton();
    40         button.addActionListener(new ActionListener() {
    41             public void actionPerformed(final ActionEvent e) {
    42                 final String hostName = hostField.getText();
    43                 String portNum = portField.getText();
    44                 final int port = Integer.parseInt(portNum);
    45                         try {
    46                             final InetAddress host = InetAddress.getByName(hostName);//实例化对应主机的InetAddress对象
    47                             Socket socket = new Socket(host, port); //实例化socket
    48                             final InputStream is = socket.getInputStream();  //对应服务器端的getoutputstream
    49                             InputStreamReader reader=new InputStreamReader(is);
    50                             int data = 0;
    51                             while ((data=reader.read()) != -1) {
    52                                 textArea.append((char)data+"");
    53                             }
    54                         } catch (Exception e1) {
    55                             textArea.append(e1.toString());
    56                             e1.printStackTrace();
    57                         }
    58                     }
    59         });
    60         button.setText("连接");
    61         panel.add(button);
    62         
    63         final JScrollPane scrollPane = new JScrollPane();
    64         getContentPane().add(scrollPane, BorderLayout.CENTER);
    65         
    66         textArea = new JTextArea();
    67         textArea.setLineWrap(true);  //自动换行
    68         scrollPane.setViewportView(textArea);
    69     }
    70 }

    结果如下:

    备注:

    BoxLayout 箱式布局
    BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用水平还是垂直排列

  • 相关阅读:
    poj 2049 Let it Bead(polya模板)
    poj 1286 Necklace of Beads (polya(旋转+翻转)+模板)
    poj 2226 Muddy Fields(最小点覆盖+巧妙构图)
    poj 3692 Kindergarten (最大独立集之逆匹配)
    poj 1466 Girls and Boys(二分匹配之最大独立集)
    poj 1486 Sorting Slides(二分图匹配的查找应用)
    poj 2112 Optimal Milking (二分图匹配的多重匹配)
    PHP访问控制
    OO(Object Oriented)
    重载与重写以及重构
  • 原文地址:https://www.cnblogs.com/xtuxiongda/p/8641791.html
Copyright © 2020-2023  润新知