Maison >Java >javaDidacticiel >Comment créer une application client-serveur Java simple basée sur Swing à l'aide de sockets ?

Comment créer une application client-serveur Java simple basée sur Swing à l'aide de sockets ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-25 18:27:19995parcourir

How to Create a Simple Swing-based Java Client-Server Application Using Sockets?

Utilisation des sockets dans l'applet Swing

Question

Écrire un programme serveur et client en utilisant le langage Java basé sur Swing et GUI. Nous devons en quelque sorte créer un socket qui va du serveur au client et du client au serveur, et être capable de transmettre une sorte de chaîne. J'espère écrire plus tard une fonction qui effectue plusieurs opérations basées sur la chaîne dans le socket. Pour une raison quelconque, je ne trouve pas d'exemple de code simple montrant comment y parvenir de manière simple. Quelqu'un a-t-il un exemple simple ou peut-il expliquer comment y parvenir ?

Réponse

En s'appuyant sur cet exemple, voici un simple couplage client-serveur réseau utilisant Swing. Il y a quelques problèmes liés à une synchronisation correcte dont il faut être conscient : L'interface graphique elle-même est construite sur le thread de répartition d'événements à l'aide d'invoqueLater(). De plus, ce code repose sur le fait que append() soit thread-safe. Enfin, j'ai utilisé une astuce pratique tirée de l'article "TextArea Scrolling".

Mise à jour : Dans Java 7, append() n'est plus marqué comme thread-safe ; utilisez EnsureLater() dans display() pour trier les mises à jour.

[Photo : Écho](https://i.sstatic.net/W32IY.png)

package net;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Scanner;
import javax.swing.*;
import javax.swing.text.DefaultCaret;

/**
 * A simple network client-server pair
 * @http://stackoverflow.com/questions/3245805
 */
public class Echo implements ActionListener, Runnable {

    // 常量
    private static final String HOST = "127.0.0.1";
    private static final int PORT = 12345;

    // GUI 组件
    private final JFrame f = new JFrame();
    private final JTextField tf = new JTextField(25);
    private final JTextArea ta = new JTextArea(15, 25);
    private final JButton send = new JButton("Send");

    // 网络变量
    private volatile PrintWriter out;
    private Scanner in;
    private Thread thread;

    // 类型枚举
    private Kind kind;

    public static enum Kind {
        Client(100, "Trying"), 
        Server(500, "Awaiting");

        private int offset;
        private String activity;

        private Kind(int offset, String activity) {
            this.offset = offset;
            this.activity = activity;
        }
    }

    public Echo(Kind kind) {
        this.kind = kind;
        // GUI 设置

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn