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

server and client side socket programming?

本文关键字:编程 套接字 客户端 服务器端      更新时间:2023-09-26

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

套接字编程

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

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

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

使用套接字−在两台计算机之间建立TCP连接时,将执行以下步骤

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

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

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

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

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

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

有两种类型的soket:

服务器套接字-用于绑定()到端口,并为客户端的connect()列出()。因此,服务器只是在等待对话,而不启动对话。

客户端套接字-用于连接()到listen()服务器。客户端启动连接。

服务器应用程序

导入java.io.;导入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);
    }
}

}

客户端应用程序

导入java.io.;导入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);
    }
}

}

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

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

在本例中(https://github.com/Automattic/socket.io/tree/master/examples/chat)你可以看到通过socket.io实现的聊天。你可以简单地用开关在客户端触发事件,而不是在用户屏幕上显示结果。