Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: shoshon в Jan 10, 2010, 22:44



Титла: QTcpSocket замръзва на connecting
Публикувано от: shoshon в 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


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


Титла: Re: QTcpSocket замръзва на connecting
Публикувано от: nifelheim в Jan 11, 2010, 00:45
Не разбирам нищо от джава, но опитай дали така ще има някаква промяна:
socket.connectToHost("localhost", 9999);


Титла: Re: QTcpSocket замръзва на connecting
Публикувано от: ръца-пръца в Jan 11, 2010, 01:17
Аз пък от QT нищо не разбирам ;) Ама ако мога да си позволя един тъп въпрос, сигурен ли си, че на порт 9999 някой те слуша? ;)


Титла: Re: QTcpSocket замръзва на connecting
Публикувано от: spec1 в Jan 11, 2010, 09:45
 А защо не използваш стандартният клас Socket  ?
 new Socket(...  съотв. конструктор ...


Титла: Re: QTcpSocket замръзва на connecting
Публикувано от: shoshon в Jan 12, 2010, 13:00
Проблема се реши:
В main метода птрябва първо да се инициализира QApplication.init(args) и да има app.run().
Иначе курец....