Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. A qt client connect with a java server
Forum Updated to NodeBB v4.3 + New Features

A qt client connect with a java server

Scheduled Pinned Locked Moved General and Desktop
15 Posts 2 Posters 4.9k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    andreyc
    wrote on last edited by
    #4

    Another option if you have source code of server.handle(), is to check where is throws an IOException and why its message is null.

    1 Reply Last reply
    0
    • P Offline
      P Offline
      parkir
      wrote on last edited by
      #5

      my server is the following
      chatServer.java
      @import java.net.;
      import java.io.
      ;

      public class ChatServer implements Runnable {
      private ChatServerThread clients[] = new ChatServerThread[50];
      private ServerSocket server = null;
      private Thread thread = null;
      private int clientCount = 0;

      public ChatServer(int port) {
      try {
      System.out.println("Binding to port " + port + ", please wait ...");
      server = new ServerSocket(port);
      System.out.println("Server started: " + server);
      start();
      } catch (IOException ioe) {
      System.out.println("Can not bind to port " + port + ": " + ioe.getMessage());
      }
      }

      public void run() {
      while (thread != null) {
      try {
      System.out.println("Waiting for a client ...");
      addThread(server.accept());
      } catch (IOException ioe) {
      System.out.println("Server accept error: " + ioe);
      stop();
      }
      }
      }

      public void start() {
      if (thread == null) {
      thread = new Thread(this);
      thread.start();
      }
      }

      public void stop() {
      if (thread != null) {
      thread.stop();
      thread = null;
      }
      }

      private int findClient(int ID) {
      for (int i = 0; i < clientCount; i++)
      if (clients[i].getID() == ID)
      return i;
      return -1;
      }

      public synchronized void handle(int ID, String input) {
      if (input.equals(".bye")) {
      clients[findClient(ID)].send(".bye");
      remove(ID);
      } else
      for (int i = 0; i < clientCount; i++)
      clients[i].send(ID + ": " + input);
      }

      public synchronized void remove(int ID) {
      int pos = findClient(ID);
      if (pos >= 0) {
      ChatServerThread toTerminate = clients[pos];
      System.out.println("Removing client thread " + ID + " at " + pos);
      if (pos < clientCount - 1)
      for (int i = pos + 1; i < clientCount; i++)
      clients[i - 1] = clients[i];
      clientCount--;
      try {
      toTerminate.close();
      } catch (IOException ioe) {
      System.out.println("Error closing thread: " + ioe);
      }
      toTerminate.stop();
      }
      }

      private void addThread(Socket socket) {
      if (clientCount < clients.length) {
      System.out.println("Client accepted: " + socket);
      clients[clientCount] = new ChatServerThread(this, socket);
      try {
      clients[clientCount].open();
      clients[clientCount].start();
      clientCount++;
      } catch (IOException ioe) {
      System.out.println("Error opening thread: " + ioe);
      }
      } else
      System.out.println("Client refused: maximum " + clients.length + " reached.");
      }

      public static void main(String args[]) {
      ChatServer server = null;
      if (args.length != 1)
      System.out.println("Usage: java ChatServer port");
      else
      server = new ChatServer(Integer.parseInt(args[0]));
      }

      }
      @

      and ChatServerThread.java
      @import java.net.;
      import java.io.
      ;

      public class ChatServerThread extends Thread {
      private ChatServer server = null;
      private Socket socket = null;
      private int ID = -1;
      private DataInputStream streamIn = null;
      private DataOutputStream streamOut = null;

      public ChatServerThread(ChatServer _server, Socket _socket) {
      super();
      server = _server;
      socket = _socket;
      ID = socket.getPort();
      }

      public void send(String msg) {
      try {
      streamOut.writeUTF(msg);
      streamOut.flush();
      streamOut.writeUTF("writeUTF");
      streamOut.writeInt(1234);

      } catch (IOException ioe) {
      System.out.println(ID + " ERROR sending: " + ioe.getMessage());
      server.remove(ID);
      stop();
      }
      }

      public int getID() {
      return ID;
      }

      public void run() {
      System.out.println("Server Thread " + ID + " running.");
      while (true) {
      try {
      server.handle(ID, streamIn.readUTF());
      } catch (IOException ioe) {
      System.out.println(ID + " ERROR reading: " + ioe.getMessage());
      server.remove(ID);
      stop();
      }
      }
      }

      public void open() throws IOException {
      streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
      streamOut = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
      }

      public void close() throws IOException {
      if (socket != null)
      socket.close();

      if (streamIn != null)
      streamIn.close();

      if (streamOut != null)
      streamOut.close();
      }
      }
      @

      but I cant change the code of server..only the client side which is written in Qt.

      1 Reply Last reply
      0
      • A Offline
        A Offline
        andreyc
        wrote on last edited by
        #6

        What you will get if you try to read input without processing it.
        @
        public void run() {
        System.out.println("Server Thread " + ID + " running.");
        while (true) {
        try {
        System.out.println(streamIn.readUTF());
        //server.handle(ID, streamIn.readUTF());
        } catch (IOException ioe) {
        System.out.println(ID + " ERROR reading: " + ioe.getMessage());
        server.remove(ID);
        stop();
        }
        }
        }
        @

        [EDIT] Did you try to use wireshark and, or netcat?

        1 Reply Last reply
        0
        • P Offline
          P Offline
          parkir
          wrote on last edited by
          #7

          sr but I dont understand how to use both of them.

          1 Reply Last reply
          0
          • P Offline
            P Offline
            parkir
            wrote on last edited by
            #8

            I tried your changes but nothing!
            It goes to catch.

            The error display when I close the client!

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andreyc
              wrote on last edited by
              #9

              Have you tried another client like ncat or netcat ?
              Have you tried wireshark to see what is sent ?

              [quote author="parkir" date="1407169299"]But when I use the Qt client with a server written in Qt, everything is ok and respectively for the java client and server.[/quote]

              You can compare what is sent between a Java client and Java Server with Qt client and Java server using wireshark.

              1 Reply Last reply
              0
              • P Offline
                P Offline
                parkir
                wrote on last edited by
                #10

                With the wireshark i can't understand whta happen and how to run but I am running the Zenmap, tell me what parameters to insert to give you the results..

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  andreyc
                  wrote on last edited by
                  #11

                  IIRC(If I Memeber Correctly) Zenmap is for scanning the computer ports not for sniffing a traffic.

                  But anyway. I tested your java code and simple client. My client connects to server, sends text and disconnect.

                  I see that client connect to java server and sends text and disconnect.
                  The error message 55130 ERROR reading: null appears when a client is disconnected, which is ok.

                  The same happens if I use ncat.

                  I don't see that ChatServer::handle() is called. I guess something should be done in the server to process the input.

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    andreyc
                    wrote on last edited by
                    #12

                    Here is modified ChatServerThread.java that works.
                    At least as I think it should work.

                    • ChatServerThread.java
                      @
                      import java.net.;
                      import java.io.
                      ;

                    public class ChatServerThread extends Thread
                    {
                    private ChatServer server = null;
                    private Socket socket = null;
                    private int ID = -1;
                    private BufferedReader streamIn = null;
                    private BufferedWriter streamOut = null;

                    public ChatServerThread(ChatServer _server, Socket _socket)
                    {
                    super();
                    server = _server;
                    socket = _socket;
                    ID = socket.getPort();
                    }

                    public void send(String msg)
                    {
                    try {
                    streamOut.write(msg + "\n");
                    streamOut.flush();
                    }
                    catch (IOException ioe) {
                    System.out.println(ID + " ERROR sending: " + ioe.getMessage());
                    server.remove(ID);
                    stop();
                    }
                    }

                    public int getID()
                    {
                    return ID;
                    }

                    public void run()
                    {
                    System.out.println("Server Thread " + ID + " running.");
                    while (true) {
                    try {
                    String input = streamIn.readLine();
                    if (input != null) {
                    server.handle(ID, input);
                    } else {
                    System.out.println(ID + " we lost the client :-(.\n");
                    server.remove(ID);
                    stop();
                    }
                    }
                    catch (IOException ioe) {
                    System.out.println(ID + " ERROR reading: " + ioe.getMessage());
                    server.remove(ID);
                    stop();
                    }
                    }
                    }

                    public void open() throws IOException
                    {
                    streamIn =
                    new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    streamOut =
                    new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    }

                    public void close() throws IOException
                    {
                    if (socket != null)
                    socket.close();

                    if (streamIn != null)
                      streamIn.close();
                    
                    if (streamOut != null)
                      streamOut.close();
                    

                    }
                    }
                    @

                    1 Reply Last reply
                    0
                    • P Offline
                      P Offline
                      parkir
                      wrote on last edited by
                      #13

                      I think so the problem is the client..

                      I post you the mainwindow.cpp

                      @#include "mainwindow.h"
                      #include "ui_mainwindow.h"
                      #include <QStackedWidget>
                      #include "about.h"
                      #include <QMessageBox>

                      MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
                      ui(new Ui::MainWindow)
                      {
                      ui->setupUi(this);

                      //set background color
                      setStyleSheet("background-color: rgb(87,87,87)");
                      
                      //the login group
                      ui->loginGroup->setStyleSheet("background-color: rgb(112,128,144); color:white");
                      
                      //button
                      ui->btn_login->setStyleSheet("QPushButton { background-color: rgb(176,196,222); color:black }");
                      ui->btnSend->setStyleSheet("QPushButton { background-color: rgb(176,196,222); color:black }");
                      
                      //label
                      ui->label_welcome->setStyleSheet("QLabel {font-family:Pristina; font-size: 30px; color:white;}");
                      
                      //QlineEdit
                      ui->txt_nickname->setStyleSheet("QLineEdit {background-color: white; color:black}");
                      ui->txt_serverIP->setStyleSheet("QLineEdit {background-color: white; color:black}");
                      ui->msgArea->setStyleSheet("QLineEdit {background-color: white; color:black}");
                      
                      //the place who display everything from the chat room
                      ui->roomTextMsg->setStyleSheet("background-color: rgb(112,128,144); color:white");
                      
                      //set the IP of my server
                      ui->txt_serverIP->setText("localhost");
                      
                      //menu bar
                      ui->menuAbout->setStyleSheet("background-color: rgb(112,128,144); color:white");
                      
                      socket = new QTcpSocket(this);
                      
                      ui->stackedWidget->setCurrentWidget(ui->loginPage);
                      
                      //socket->write(QString("\n"+nickName ).toUtf8());
                      
                      connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
                      connect(socket, SIGNAL(connected()), this, SLOT(connected()));
                      

                      }

                      MainWindow::~MainWindow()
                      {
                      delete ui;
                      thread->deleteLater();
                      }

                      void MainWindow::displayMsg(QByteArray sentMsg)
                      {
                      QString msg = QString(sentMsg.data());
                      ui->roomTextMsg->append(msg);
                      }

                      void MainWindow::sendTheMsg()
                      {
                      QByteArray buffer;
                      buffer.append(nickName);
                      buffer.append(": ");
                      buffer.append(ui->msgArea->text());
                      socket->write("<i>"+ buffer +"</i>");
                      qDebug() << buffer;

                      ui->msgArea->clear();
                      

                      }

                      void MainWindow::on_btnSend_clicked()
                      {
                      if( !(ui->msgArea->text() == ""))
                      {
                      sendTheMsg();
                      }
                      }

                      void MainWindow::readyRead()
                      {
                      thread = new QThread();
                      ui->roomTextMsg->append(socket->readAll());
                      socket->flush();
                      socket->waitForBytesWritten(3000);

                      socket->moveToThread(thread);
                      thread->start();
                      

                      }

                      void MainWindow::on_btn_login_clicked()
                      {
                      nickName = ui->txt_nickname->text().trimmed();

                      socket->connectToHost(ui->txt_serverIP->text(), 1234);
                      socket->waitForConnected(3000);
                      

                      }

                      void MainWindow::connected()
                      {
                      // Flip over to the chat page:
                      ui->stackedWidget->setCurrentWidget(ui->chatRoom);

                      // And send our username to the chat server.
                      socket->write(QString("\n"+nickName + " ..connected\n").toUtf8());
                      

                      --}

                      void MainWindow::on_msgArea_returnPressed()
                      {
                      if( !(ui->msgArea->text() == ""))
                      {
                      sendTheMsg();
                      }
                      }
                      @
                      this is the client code..this code I have to change and me it to communicate with the server..but I cant find why cannot send and recieve a msg

                      1 Reply Last reply
                      0
                      • P Offline
                        P Offline
                        parkir
                        wrote on last edited by
                        #14

                        Did you find a solution andreyc?

                        1 Reply Last reply
                        0
                        • A Offline
                          A Offline
                          andreyc
                          wrote on last edited by
                          #15

                          No, unfortunately nothing.

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved