当前位置: 首页 > 知识库问答 >
问题:

通过套接字在Java中从代码中的不同位置发送数据

苏富
2023-03-14

这是我第一次在任何编程语言中使用套接字(我对这个主题一点都不熟悉),我很难理解如何从不同的代码位置发送数据。

我想把数据从一个socket类发送到另一个serverplace,而不是socket类。我该怎么做?

这是我的代码:

服务器JAVA

package socket;

import database.models.PersoanaEntity;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static final int PORT = 27015;

    public void start() {
        new Thread(() -> {
            try {
                ServerSocket serverSocket = new ServerSocket(PORT);
                Socket clientSocket = null;
                PersoanaEntity loggedInPerson = new PersoanaEntity();
                boolean isClose = false;

                System.out.println("Server is running");
                while (!isClose) {
                    clientSocket = serverSocket.accept();
                    new Thread(new ServerThread(clientSocket)).start();
                }
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

服务器线程。JAVA

package socket;

import org.json.JSONObject;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

public class ServerThread extends Thread{
    private Socket socket = null;
    private ObjectInputStream in = null;
    private ObjectOutputStream out = null;

    public ServerThread(Socket socket) {
        this.socket = socket;
        try {
            //For receiving and sending data
            this.in = new ObjectInputStream(socket.getInputStream());
            this.out = new ObjectOutputStream(socket.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void run() {
        try {
            String recievedData = this.in.readObject().toString();
            JSONObject jsonObject = new JSONObject(recievedData);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private void sendMessage(String message) {
        try {
            this.out.writeObject(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

假设我想从项目中的其他类调用sendMessage。有办法吗?

谢谢

共有1个答案

杜焕
2023-03-14

保留对ServerThread对象的引用,并将sendMessage的可见性更改为public。然后可以从任何地方调用它。

旁白:因为ServerThread扩展了Thread,所以您不需要将其包装成一个新的Thread,比如这个new Thread(new ServerThread(clientSocket))

 类似资料:
  • 问题内容: 我有2个java netbeans项目,一个是Server,另一个是Client。我已经创建了一个Message类,该类要传递给服务器,并在服务器上进行修改后以另一种方式返回给客户端。我在两个项目中都包含了Message类。我使用和传递对象。服务器和客户端之间的连接正常,并且对象通过,但在服务器上,当我从using 方法读取对象时,将其类型转换为类。但是在服务器上抛出 ClassNot

  • 我有一个数组类型的。我必须在python中通过流/TCP套接字发送它。然后我必须在接收端接收相同的阵列。

  • 问题内容: 我如何使用getOutputStream方法发送一个strin。正如他们提到的,它只能发送字节。到目前为止,我可以发送一个字节。但不是字符串值。 提前致谢 问题答案: 如何使用PrintWriter: 编辑 :找到了我自己的答案,看到讨论了一个改进,但未列出。这是使用OutputStreamWriter编写字符串的更好方法:

  • 问题内容: 我真的很困惑如何通过套接字发送图像数据类型。请帮我。我已经搜寻了如何将Image数据类型转换为char [],但结果为0。 问题答案: 您可以使用以下方法将其转换为(source): 然后,您可以使用ImageIO.write()方法写入结果。

  • 问题内容: 我正在尝试用Python编写一个实现套接字的程序,每个客户端发送一个PDF文件,服务器接收该文件,标题更改为“ file_number.pdf”(即:file_1.pdf)。出现的问题是只有客户端才能成功发送文件。当第二个客户端尝试发送程序时,它确实崩溃了。我在做什么错,我该如何解决我的代码以允许N个客户端(N <20)连接到服务器并传输文件? 这是服务器代码: 这是客户端代码: 为了

  • 问题内容: 我有工作的服务器和客户端应用程序,它们在发送小文件时可以完美工作,但是当我尝试通过套接字发送例如700mb的电影文件时,它给了我 我在互联网上搜索并找到了一些有关发送大文件的教程,但并不太了解它们,但是我认为我的麻烦在于编写文件。 这是服务器用来写入我的文件的代码: 这是我的客户用来发送文件的代码: 问题答案: 它之所以给您,是因为您试图在发送之前将整个文件读入内存。这完全是100%完