1

更新:我完全按照朋友建议的方式解决了这个问题。但我有点错过了一个事实,即我必须遵循 mysql 的协议才能获得结果。在 mysql 中,总是有一个初始握手包没有任何数据字段,因此您不会使用 getInputStream 获得任何数据。唯一的方法是在您自己的服务器中创建一个 mysql 连接并将结果发送到您的客户端。它工作得很好。谢谢大家

我想用java读取mysql连接信息。例如,我在端口 4444 上使用 java 创建了一个服务器套接字。然后我在端口 4444 上创建了一个 jdbc 连接。但它不起作用。我不知道为什么,甚至我也不知道这是否可能。这是服务器代码:

int portNr = 4444;
// Create a ServerSocket object to watch that port for clients
ServerSocket ss;
try {
    ss = new ServerSocket(portNr);

    System.out.println("starting...");

    // Here we loop indefinitely, just waiting for clients to connect
    while (true) {

        // accept() does not return until a client requests a connection
        // Now that a client has arrived, create an instance of our
        // special
        // thread subclass to respond to it.
        Socket clientSocket = null;
        try {
            clientSocket = ss.accept();

            System.err.println("heheh"+clientSocket);
            // PrintWriter out = new
            // PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(
                  new InputStreamReader(clientSocket.getInputStream()));
            String inputLine = in.readLine();
            System.err.println(inputLine)....;</i>

它打印“hehehe”;但它不打印输入行。

这是我的连接代码:

public class messagetest
{
    // The JDBC Connector Class.
    private static final String dbClassName = "com.mysql.jdbc.Driver";

    private static final String CONNECTION =
                      "jdbc:mysql://127.0.0.1:4444/shadi";

    public static void main(String[] args) throws
                         Exception,SQLException
     {
        System.out.println(dbClassName);

        Class.forName(dbClassName);

        // Properties for user and password. Here the user and password are both 'paulr'
        Properties p = new Properties();
        p.put("user","--------");
        p.put("password","-------");

        System.err.println("after p");
        Connection c = DriverManager.getConnection(CONNECTION,p);

        System.err.println("client:");

它不打印“客户:”感谢您的帮助。

4

1 回答 1

2

您不能将自己的服务器绑定到与 DB-Server 实例相同的端口上。

如果你真的想像那样“监控”它,请使用一个小“中间人”:将数据库设置到另一个端口,比如 4445。然后在你的监视器中监听 4444,客户端将连接到并建立你自己的连接到4445。然后在两者之间转发输入和输出。

编辑:好的,我们清除了。忘记我回答的第一部分。

您的服务器在 4444 上运行,您的数据库在 3306 上运行。

因此,在您的监视器中,您需要两个连接:一个 Monitor-Client 和一个 Monitor-DB。您必须有两个线程读取每个线程并将其读取的内容写入另一个线程。

而且我不知道您是否会喜欢使用 readLine。为了检查正在发送的内容,我建议阅读字节......

于 2012-09-25T08:28:12.177 回答