Results 1 to 3 of 3

Thread: Problem in writing data to socket.

  1. #1
    Join Date
    May 2011
    Posts
    120
    Qt products
    Qt3 Qt4
    Platforms
    Windows
    Thanks
    9

    Default Problem in writing data to socket.

    Hi
    i am writing a list of bytearray on socket as following

    Qt Code:
    1. for(int i=0; i<array.size(); i++)
    2. {
    3. QByteArray byte_array = array.at(i);
    4. socket_new->socket->write(byte_array);
    5. socket_new->socket->waitForBytesWritten(3000);
    6. delay();
    7. }
    To copy to clipboard, switch view to plain text mode 

    in delay() function

    Qt Code:
    1. void control_screen::delay()
    2. {
    3. for(int i=0; i<50000; i++)
    4. {
    5. for(int i=0; i<5000000; i++);
    6. }
    7. }
    To copy to clipboard, switch view to plain text mode 

    It is working fine in debuge build as i want but when i build it in release mode whole array transmit at once. there is no time interval b/w data.

    Guide me.

  2. #2
    Join Date
    Apr 2011
    Location
    Russia
    Posts
    85
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    2
    Thanked 13 Times in 13 Posts

    Default Re: Problem in writing data to socket.

    Try this code:
    Qt Code:
    1. #define MTUR 1460
    2. #define MAX_MTUR (MTUR * 1000)
    3. //=================================================================================================
    4. int Server::owriten( char *ptr, int nbytes )
    5. {
    6. #ifdef UNIX
    7. int n;
    8. int rc;
    9. char *p;
    10. int nleft;
    11. char *bf = 0;
    12.  
    13. for (nleft = nbytes; nleft > 0;)
    14. {
    15. if (nleft >= MAX_MTUR)
    16. {
    17. n = MAX_MTUR;
    18. p = ptr;
    19. }
    20. else
    21. {
    22. bf = new char[ MAX_MTUR ];
    23.  
    24. if (!bf)
    25. return -1;
    26.  
    27. memset( bf, 0, sizeof( bf ) );
    28. memcpy( bf, ptr, nleft );
    29. p = bf;
    30. n = (nleft / MTUR + 1) * MTUR;
    31. }
    32.  
    33. rc = writen( p, n );
    34.  
    35. if (bf)
    36. {
    37. delete[] bf;
    38. bf = 0;
    39. }
    40.  
    41. if (rc != n)
    42. return rc;
    43.  
    44. if (nleft > MAX_MTUR)
    45. {
    46. ptr += n;
    47. nleft -= MAX_MTUR;
    48. }
    49. else
    50. break;
    51. }
    52.  
    53. return nbytes;
    54. #else
    55. int temp = 0;
    56. int sent = 0;
    57. quint64 offset = 0;
    58.  
    59. for (;;)
    60. {
    61. if (nbytes >= MAX_MTUR)
    62. temp = MAX_MTUR;
    63. else
    64. temp = nbytes;
    65.  
    66. int rc = writen( &ptr[ offset ], temp );
    67.  
    68. if (rc != temp)
    69. return rc;
    70.  
    71. offset += rc;
    72. sent += rc;
    73. nbytes -= rc;
    74.  
    75. if (nbytes <= 0)
    76. break;
    77. }
    78.  
    79. return sent;
    80. #endif
    81. }
    82. //=================================================================================================
    83. int Server::writen( char *ptr, int nbytes )
    84. {
    85. int nleft, nwritten;
    86.  
    87. nleft = nbytes;
    88.  
    89. while (nleft > 0)
    90. {
    91. nwritten = socket_new->socket->write( ptr, nleft );
    92.  
    93. if (nwritten <= 0)
    94. return nwritten; // error
    95.  
    96. nleft -= nwritten;
    97. ptr += nwritten;
    98. }
    99.  
    100. return nbytes - nleft;
    101. }
    102. //=================================================================================================
    103. int Server::put_mes_bin( char *fbuf, int fbuf_len )
    104. {
    105. int n;
    106.  
    107. if (optimize_mtu_mru)
    108. n = owriten( fbuf, fbuf_len );
    109. else
    110. n = writen( fbuf, fbuf_len );
    111.  
    112. if (n < 0)
    113. {
    114. qDebug("Write socket error);
    115. exit( E_WRITE );
    116. }
    117. else if (n == 0)
    118. {
    119. qDebug("Connection closed");
    120. exit( E_WRITE );
    121. }
    122.  
    123. return n;
    124. }
    125. //=================================================================================================
    126.  
    127. int size = array.size();
    128.  
    129. for (register int i = 0; i < size; ++i)
    130. {
    131. char *byte_array = array.at(i).data();
    132. int length = array.at(i).size();
    133.  
    134. if (put_mes_bin( byte_array, length ) != length)
    135. qDebug("Error sending data to client");
    136. }
    To copy to clipboard, switch view to plain text mode 

  3. #3
    Join Date
    Feb 2011
    Posts
    354
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Windows
    Thanks
    17
    Thanked 27 Times in 24 Posts

    Default Re: Problem in writing data to socket.

    Don't do the delay this way (use timer), however, I don't understand why do you need a delay here at all.

Similar Threads

  1. QTcpSocket Writing Data Progress
    By lwinhtooko in forum Qt Programming
    Replies: 2
    Last Post: 1st November 2010, 21:10
  2. Replies: 1
    Last Post: 18th October 2010, 17:07
  3. Writing Data Aware Forms in QT4.
    By gsQT4 in forum Qt Programming
    Replies: 5
    Last Post: 21st March 2007, 11:35
  4. reading and writing data from a QTableWidget
    By zorro68 in forum Qt Programming
    Replies: 4
    Last Post: 29th January 2007, 21:51
  5. Reading/Writing data from/to usb device
    By yellowmat in forum Newbie
    Replies: 2
    Last Post: 6th March 2006, 14:08

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.