服务器和客户端套接字编程?

时间:2014-10-12 11:18:40

标签: javascript webclient

服务器想要向客户端应用程序发送消息(java脚本)。 如果客户端收到消息,它将激活......(实时) 我应该使用socket.io吗? 可以使用哪种库或方法?

2 个答案:

答案 0 :(得分:0)

这取决于您喜欢的技术。 WebSockets非常适合解决实时问题。 Socket.IO能够在客户端和服务器端触发事件,并在另一端对这些事件做出反应。

Socket.IO在Node JS服务器上运行良好。 (http://nodejs.org/

在此示例中(https://github.com/Automattic/socket.io/tree/master/examples/chat),您会看到通过socket.io实现的聊天。您可以使用开关在客户端激活事件,而不是将结果显示给用户屏幕。

答案 1 :(得分:0)

套接字编程

套接字使用TCP提供两台计算机之间的通信机制。客户端程序在通信的末尾创建一个套接字,并尝试将该套接字连接到服务器。

建立连接后,服务器会在通信结束时创建一个套接字对象。客户端和服务器现在可以通过写入和读取套接字进行通信。

java.net.Socket类表示一个套接字,java.net.ServerSocket类为服务器程序提供了一种监听客户端并与它们建立连接的机制。

使用套接字在两台计算机之间建立TCP连接时会发生以下步骤 -

服务器实例化ServerSocket对象,表示要在哪个端口号进行通信。

服务器调用ServerSocket类的accept()方法。此方法等待客户端连接到给定端口上的服务器。

服务器等待后,客户端实例化Socket对象,指定要连接的服务器名称和端口号。

Socket类的构造函数尝试将客户端连接到指定的服务器和端口号。如果建立了通信,则客户端现在具有能够与服务器通信的Socket对象。

在服务器端,accept()方法返回对连接到客户端套接字的服务器上的新套接字的引用。

建立连接后,可以使用I / O流进行通信。每个套接字都有一个OutputStream和一个InputStream。客户端的OutputStream连接到服务器的InputStream,客户端的InputStream连接到服务器的OutputStream。

有两种类型的soket:

服务器套接字 - 创建bind()到端口,listen()从客户端connect()。所以服务器只是等待对话而不开始。

创建了

客户端套接字 - 以将connect()连接到listen()服务器。客户端启动连接。

服务器应用

import java.io. ; import java.net。;

公共类ServerApp {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    try {
        ServerSocket Server_Socket;
        Server_Socket = new ServerSocket(5555);

        Socket clientSocket = null;
        clientSocket = Server_Socket.accept();

        DataInputStream input;
        input = new DataInputStream(clientSocket.getInputStream());
        System.out.println(input.readUTF());

        DataOutputStream output;
        output = new DataOutputStream(clientSocket.getOutputStream());

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = "", str2 = "";
        while (!str.equals("stop")) 
        {
            str = input.readUTF();
            System.out.println("client says: " + str);
            str2 = br.readLine();
            output.writeUTF(str2);
            output.flush();
        }
        input.close();
        clientSocket.close();
        Server_Socket.close();

    } catch (Exception e) {
        System.out.println(e);
    }

}

}

客户端应用

import java.io. ; import java.net。;

公共类ClientApp {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        Socket Client_Socket;
        Client_Socket = new Socket("localhost", 5555);

        DataInputStream input;
        input = new DataInputStream(Client_Socket.getInputStream());

        DataOutputStream output;
        output = new DataOutputStream(Client_Socket.getOutputStream());

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = "", str2 = "";
        while (!str.equals("stop")) {
            str = br.readLine();
            output.writeUTF(str);
            output.flush();
            str2 = input.readUTF();
            System.out.println("Server says: " + str2);
        }

        output.flush();
        output.close();
        Client_Socket.close();
    } catch (Exception e) {
        System.out.println(e);
    }

}

}