Автор Тема: QTcpSocket замръзва на connecting  (Прочетена 1156 пъти)

shoshon

  • Гост
QTcpSocket замръзва на connecting
« -: Jan 10, 2010, 22:44 »
Ето кода на програмата. Проблема е че tcp сокета си седи на connecting. Не ми се сърдете че не съм го направил със сигнали- мързешеме, а и съм сигурен какъв ще е резултата.

Къде е проблема
Код
GeSHi (Java):
  1. import java.awt.Button;
  2. import java.awt.FlowLayout;
  3. import java.awt.TextField;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.WindowAdapter;
  7. import java.awt.event.WindowEvent;
  8. import java.io.IOException;
  9. import java.io.ObjectOutputStream;
  10. import java.net.Socket;
  11.  
  12. import javax.swing.JFrame;
  13.  
  14. import com.trolltech.qt.core.QDataStream;
  15. import com.trolltech.qt.core.QIODevice;
  16. import com.trolltech.qt.core.QIODevice.OpenModeFlag;
  17. import com.trolltech.qt.network.QAbstractSocket;
  18. import com.trolltech.qt.network.QHostAddress;
  19. import com.trolltech.qt.network.QTcpSocket;
  20. import com.trolltech.qt.network.QHostAddress.SpecialAddress;
  21.  
  22. public class GiglesMain extends JFrame{
  23. TextField ctrwField = new TextField("5");
  24. Button sendButton = new Button("send");
  25. Button connectButton = new Button("connect");
  26. Button statusButton = new Button("status");
  27. QTcpSocket socket;
  28. public GiglesMain(){
  29. initGUI();
  30. }
  31.  
  32. protected void initGUI(){
  33. this.addWindowListener(new WindowAdapter() {
  34.  
  35. public void windowClosing(WindowEvent e){
  36. System.exit(0);
  37. }
  38.  
  39. // public void windowClosed(WindowEvent e){
  40. // System.exit(0);
  41. // }
  42. });
  43.  
  44. this.setLayout(new FlowLayout());
  45.  
  46. this.sendButton.addActionListener(new ActionListener() {
  47.  
  48. public void actionPerformed(ActionEvent e) {
  49.  
  50. System.out.println("/----- Data Send----/");
  51. QDataStream stream = new QDataStream(socket);
  52. stream.writeInt(Integer.valueOf(ctrwField.getText()));
  53. System.out.println("State: "+socket.state()+" Data sent : "+Integer.valueOf(ctrwField.getText())+" Data to write:"+socket.bytesToWrite());
  54.  
  55. }
  56.  
  57. public void displayError(QAbstractSocket.SocketError error){
  58. System.out.println("Socket error: "+error);
  59. }
  60. public void bytesWritten(){
  61. System.out.println("bytes are written");
  62. }
  63. });
  64.  
  65. statusButton.addActionListener(new ActionListener(){
  66.  
  67. public void actionPerformed(ActionEvent e) {
  68. // TODO Auto-generated method stub
  69. System.out.println("Socket status: "+socket.state()+" Error String:"+socket.errorString());
  70. }
  71. });
  72.  
  73. connectButton.addActionListener(new ActionListener() {
  74.  
  75. public void actionPerformed(ActionEvent e) {
  76. System.out.println("/------Defined socket--------/");
  77. socket = new QTcpSocket();
  78.  
  79. System.out.println("Tryint to connect socket");
  80. socket.connectToHost(new QHostAddress(SpecialAddress.LocalHost),9999, OpenModeFlag.WriteOnly);
  81.  
  82. System.out.println(socket.state());
  83.  
  84. }
  85. });
  86. this.add(ctrwField);
  87. this.add(connectButton);
  88. this.add(sendButton);
  89. this.add(statusButton);
  90. this.setSize(300, 200);
  91. this.setVisible(true);
  92. }
  93.  
  94. public static void main(String[] args){
  95. GiglesMain app = new GiglesMain();
  96. }
  97. }
Малко dump:
Код:

------Defined socket--------/
Tryint to connect socket
ConnectingState
/----- Data Send----/
State: ConnectingState Data sent : 5 Data to write:4
/----- Data Send----/
State: ConnectingState Data sent : 5 Data to write:8
/----- Data Send----/
State: ConnectingState Data sent : 5 Data to write:12
/----- Data Send----/
State: ConnectingState Data sent : 5 Data to write:16


Много ви благодаря за помощта
Активен

nifelheim

  • Напреднали
  • *****
  • Публикации: 328
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Re: QTcpSocket замръзва на connecting
« Отговор #1 -: Jan 11, 2010, 00:45 »
Не разбирам нищо от джава, но опитай дали така ще има някаква промяна:
socket.connectToHost("localhost", 9999);
Активен

Оптимистът изучава английски език. Песимистът - китайски. А реалистът - автомат Калашников.

ръца-пръца

  • Напреднали
  • *****
  • Публикации: 49
    • Профил
Re: QTcpSocket замръзва на connecting
« Отговор #2 -: Jan 11, 2010, 01:17 »
Аз пък от QT нищо не разбирам ;) Ама ако мога да си позволя един тъп въпрос, сигурен ли си, че на порт 9999 някой те слуша? ;)
Активен

spec1

  • Напреднали
  • *****
  • Публикации: 230
    • Профил
Re: QTcpSocket замръзва на connecting
« Отговор #3 -: Jan 11, 2010, 09:45 »
 А защо не използваш стандартният клас Socket  ?
 new Socket(...  съотв. конструктор ...
Активен

shoshon

  • Гост
Re: QTcpSocket замръзва на connecting
« Отговор #4 -: Jan 12, 2010, 13:00 »
Проблема се реши:
В main метода птрябва първо да се инициализира QApplication.init(args) и да има app.run().
Иначе курец....
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Проблем при connecting към Бг сервери ( IRC)
Настройка на програми
nachinaeshtiq 1 1012 Последна публикация Feb 18, 2006, 19:14
от Goust