首页 > 解决方案 > 从 JavaScript 连接到普通套接字

问题描述

我有一个 Java 后端来连接到 JavaScript 客户端。

但我不想使用 WebSockets。我的问题是 JavaScript 中是否有像 Java、Python 等其他语言一样的普通套接字连接。

这是一个例子:

服务器.java

import java.net.*;
import java.io.*;
import java.util.*;

public class Server{
    public static boolean isRunning;
    public static ServerSocket server;
    public static void main(String[] args) {
        try{
            isRunning = true;
            server = new  ServerSocket(3080);
            int id =  0;
            System.out.println("Server startes on port " + 3080 + " waiting for clients.");
            while(isRunning){
                Socket client = server.accept();
                System.out.println("New Client ID : " + (++id));
                Thread thread = new Thread(new Handler(id, client));
                thread.start();
            }
        }catch(SocketException se){
            System.out.println("Server has been Shutdown");
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

class Handler implements Runnable{
    private int id;
    private Socket client;

    public Handler(int id, Socket client){
        this.id = id;
        this.client = client;
    }

    @Override
    public void run(){
        try{
            Scanner sc = new Scanner(client.getInputStream());
            PrintStream ps = new PrintStream(client.getOutputStream());
            String s = "";
            while(sc.hasNextLine()){
                s = sc.nextLine();
                if(s.equals("HELLO")){
                    System.out.println("Hello from client " + id);
                }else if(s.equals("EXIT")){
                    System.out.println("Shutdown order from client " + id);
                    Server.server.close();
                    client.close();
                    break;
                }else if(s.equals("REPLY")){
                    System.out.println("Reply order from client " + id);
                    ps.println("Hello this is a reply from server!\nThank you for connecting!\nDONE");
                    ps.flush();
                }else{
                    System.out.println("Message from client " + id + " -> " + s);
                }
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

客户端.java

import java.net.*;
import java.util.*;
import java.io.*;

public class Client{
    public static void main(String[] args) {
        try{
        Socket client = new Socket("192.168.0.5", 3080);
        Scanner sc = new Scanner(client.getInputStream());
        PrintStream ps = new PrintStream(client.getOutputStream());
        System.out.println("Sending Hello to Server.");
        ps.println("HELLO");
        ps.flush();
        System.out.println("Sending Message to Server.");
        ps.println("Some Random Message");
        ps.flush();
        System.out.println("Sending Reply order to Server.");
        ps.println("REPLY");
        ps.flush();
        System.out.println("Reply from Server : ");
        String s ="";
        while(sc.hasNext()){
            s= sc.nextLine();
            if(s.equals("DONE"))
                break;
            System.out.println(s);  
        }
        System.out.println("End of Server's Reply.");
        System.out.println("Sending Shutdown order to Server.");
        ps.println("EXIT");
        ps.flush();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

现在我希望客户端是 JavaScript(来自浏览器)。

我不太确定如何实现它?

标签: javascriptjavasocketsnetworkingserver

解决方案


推荐阅读