Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2010, 11:39   #11
devnir
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 26
По умолчанию

шикарная книга. читается легко и приятно + примеры прекрасно описаны.
Познакомился с QT дико понравилась кросплатфоременость. 1 и тот же проект прекрасно собрался как под виндой так и под линью. СПС за советы ребят
devnir вне форума Ответить с цитированием
Старый 29.10.2010, 22:34   #12
devnir
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 26
По умолчанию

Собственно пытался собрать простой проект с небольшими переделками.
собственно
QT проект собира под виндой. Завтр прийду домой соберу под линью
итак щя будет много буков. а точнее листинги:
Server-ное. консольное приложение:
main.cpp

Код:
#include <QtCore/QCoreApplication>
#include "o_server.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    O_server server(1234);

    return a.exec();
}
o_server.cpp

Код:
#include "o_server.h"
#include <stdio.h>
#include <iostream>
using namespace std;


O_server::O_server(int nPort, QObject *parent) :
    QObject(parent), next_bloksize(0)
{
    m_tcpserver = new QTcpServer(this);
    if(!m_tcpserver->listen(QHostAddress::Any, nPort)){
       printf("No Listening\n");
       m_tcpserver->close();
       return;
   }
    connect(m_tcpserver, SIGNAL(newConnection()), this, SLOT(slotNewConection()));
    //printf("Server Started\n");
}
/*void*/ void O_server::slotNewConection()
{
   QTcpSocket *pClientSocket = m_tcpserver->nextPendingConnection();
   connect(pClientSocket, SIGNAL(disconnected()), pClientSocket, SLOT(deleteLater()));
   connect(pClientSocket, SIGNAL(readyRead()), this, SLOT(slotReadClient()));
   sendToClient(pClientSocket, "Server. ---Conected---\n");



}

void O_server::slotReadClient()
{

    QTcpSocket* pClientSocket = (QTcpSocket*)sender();
    QDataStream in(pClientSocket);
    in.setVersion(QDataStream::Qt_4_5);
 for(;;)
 {
 if(!next_bloksize){
  if(pClientSocket->bytesAvailable()<sizeof(quint16)){
     break;
  }
        in >> next_bloksize;
 }
 if(pClientSocket->bytesAvailable()<next_bloksize){
   break;
 }
 QTime time;
 QString str;
 in >> time >> str;
 next_bloksize =0;
 sendToClient(pClientSocket, "Resived: \"" + str + "\"");
 } 
}

void O_server::sendToClient(QTcpSocket* pSocket, const QString str)
{
  QByteArray arrBlock;
  QDataStream out(&arrBlock, QIODevice::WriteOnly);
  out.setVersion(QDataStream::Qt_4_5);
  out << quint16(0) << QTime::currentTime() << str;

  out.device()->seek(0);
  out << quint16(arrBlock.size() - sizeof(quint16));
  pSocket->write(arrBlock);
}
o_server.h

Код:
#ifndef O_SERVER_H
#define O_SERVER_H

#define PCHQSTRING( ba, str, p ) \
QByteArray ba = str.toAscii(); \
p = ba.data();

#include <QObject>
#include <QTime>
#include <QtNetwork>

class QTcpServer;
class QTcpSocket;

class O_server : public QObject
{
    Q_OBJECT
private:
    QTcpServer * m_tcpserver;
    quint16 next_bloksize;
private:
    virtual void sendToClient(QTcpSocket *pSocket, QString str);
public:
    O_server(int nPort, QObject *parent = 0);

public slots:
    virtual void slotNewConection();    
    virtual void slotReadClient();

};

#endif // O_SERVER_H
продолжение следует в след посте
devnir вне форума Ответить с цитированием
Старый 29.10.2010, 22:38   #13
devnir
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 26
По умолчанию

Клиент. брал экзампл., чисто для проверки:
main.cpp

Код:
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    O_client client("localhost", 1234);
    //client.resize(300,200);
    client.show();
    return a.exec();
}
mainwindow.cpp

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <stdio.h>
#include <iostream>
using namespace std;

O_client::O_client(const QString strHost, int nPort, QWidget *parent) :
    QWidget(parent), next_blockSize(0)
{
  m_tcpSocket =new QTcpSocket(this);
  m_tcpSocket->connectToHost(strHost,nPort);
  connect(m_tcpSocket, SIGNAL(connected()), SLOT(slotConnected()));
  connect(m_tcpSocket, SIGNAL(readyRead()), SLOT(slotReadyRead()));
  connect(m_tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this,
          SLOT(slotError(QAbstractSocket::SocketError)));
 m_ptxinfo = new QTextEdit;
 m_ptxinput = new QLineEdit;
 m_ptxinfo->setReadOnly(true);

 QPushButton *pbtn = new QPushButton("send");
 connect(pbtn, SIGNAL(clicked()), SLOT(slotSendToServer()));
 connect(m_ptxinput, SIGNAL(returnPressed()), this, SLOT(slotSendToServer()));
 QVBoxLayout *pvb = new QVBoxLayout;
 pvb->addWidget(new QLabel("Client"));
 pvb->addWidget(m_ptxinfo);
 pvb->addWidget(m_ptxinput);
 pvb->addWidget(pbtn);
 setLayout(pvb);
}

void O_client::slotReadyRead() //сообщение от сервера
{
  QDataStream in(m_tcpSocket);
  in.setVersion(QDataStream::Qt_4_5);
  //for(;;)
  {
    if(!next_blockSize){
      if(m_tcpSocket->bytesAvailable() < sizeof(quint16))
      {
       return;//break;
      }
      in >>next_blockSize;
    }

    if(m_tcpSocket->bytesAvailable() < next_blockSize){
      return;//break;
    }
    QTime time;
    QString str;
    //char buf[256];
    in >> time >> str;
/* Выводим что получили */
    //char* cConType;
    //PCHQSTRING( v1, str, cConType);
    //printf("%s\n", cConType);
    m_ptxinfo->append(time.toString()+" " + str);
    next_blockSize = 0;
    slotSendToServer();
  }

}

void O_client::slotError(QAbstractSocket::SocketError err) //обработка ошибок
{
  QString strErr =
      "Error: " + (
          err == QAbstractSocket::HostNotFoundError ?
          "Хост не найден.":
          err == QAbstractSocket::RemoteHostClosedError ?
          "Удаленный хост закрыт.":
          err == QAbstractSocket::ConnectionRefusedError ?
          "Соединение разорвано.":
          QString(m_tcpSocket->errorString())
          );
  //printf("Error");
  m_ptxinfo->append(strErr);
}

void O_client::slotSendToServer(){ //отправка сообщения серверу
  QByteArray arrBlock;
  QDataStream out(&arrBlock, QIODevice::WriteOnly);
  out.setVersion(QDataStream::Qt_4_5);
  out << quint16(0) << QTime::currentTime() << m_ptxinput->text();
  out.device()->seek(0);
  out << quint16(arrBlock.size()-sizeof(quint16));
  m_ptxinput->setText("");
}

void O_client::slotConnected(){
  //printf("Recived the conected signal\n");
  m_ptxinfo->append("Recived the conected signal");
}

int O_client::send(){
  slotSendToServer();
  return 1;
}
mainwindow.h

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QObject>
#include <QTcpSocket>
#include <QTime>
#include <QWidget>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QLabel>

#define PCHQSTRING( ba, str, p ) \
QByteArray ba = str.toAscii(); \
p = ba.data();

class QLineEdit;
class QTextEdit;

class O_client : public QWidget
{
    Q_OBJECT
private:
  QTcpSocket* m_tcpSocket;
  quint16 next_blockSize;
  QLineEdit* m_ptxinput;
  QTextEdit* m_ptxinfo;
public:
    O_client(const QString strHost, int nPort, QWidget *parent = 0);
    int send();
signals:

private slots:
    void slotSendToServer();
    void slotReadyRead( );
    void slotError (QAbstractSocket::SocketError);

    void slotConnected();
};

#endif // MAINWINDOW_H

А суть проблемы в следующем.
сервер шикарно стартует.
клиент цепляется к серверу - приходит подтверждение от сервера(то которое:
Код:
Server. ---Conected---
)
но после этого.. пытаюсь с клиента отправить любое сообщение на сервер. но сервер на это совсем никак не риагирует.
что только уже не пробывал....
кому не влом гляньте листинги.. есл влом.. можно так... поразмышять по поводу танцев с бубном
devnir вне форума Ответить с цитированием
Старый 01.11.2010, 17:29   #14
iukash
учу английский...
Форумчанин
 
Аватар для iukash
 
Регистрация: 04.04.2009
Сообщений: 480
По умолчанию

Наконец-то добрался до Вашего кода.
В общем ошибка не в сервере а в клиенте
mainwindow.cpp
в слоте закомментировать строку
Цитата:
void O_client::slotReadyRead() //сообщение от сервера
{
//slotSendToServer();
}
а в слоте добавить строку которая красным между теми строками
Цитата:
void O_client::slotSendToServer(){ //отправка сообщения серверу
out << quint16(arrBlock.size()-sizeof(quint16));

m_tcpSocket->write(arrBlock);

m_ptxinput->setText("");
}
Вот так у меня вроде работает!
"Мы можем что-то изменить и своими силами..."
"Начнешь с себя, примером ближнему поможешь..."
iukash вне форума Ответить с цитированием
Старый 02.11.2010, 10:32   #15
home
 
Аватар для home
 
Регистрация: 29.10.2010
Сообщений: 5
По умолчанию

Могу посоветовать Linux - Debian. У него есть стабильная ветка и тестовая. Тестовая ветка отличается появлением новых версий программ, даже если в них могут быть баги. Моё впечатление, что отношение к Debian'у у сообщества более качественное, чем к Ubuntu. Ubuntu это скорее передовая развития linux. Именно в нём сильнее всех линуксов сталкиваются проблемы простых пользователей и самые разные их решения.

Как редактор не рекомендую vi или emacs, но знающие рекомендуют их. А к nano относятся менее почтительно. Сам не знаю с чем связано.

Какую библиотеку здесь? Сам незнаю. Но почему бы не winsock2.h

*PB* - спец по PureBasic. По нику же видно. Может он даже его торговый агент...
home вне форума Ответить с цитированием
Старый 16.11.2010, 12:22   #16
devnir
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 26
По умолчанию

iukash СПС большое за помощь, немного был отвлечен другим проектом. но сейчас опять вернулся еще раз спс iukash
devnir вне форума Ответить с цитированием
Старый 16.11.2010, 12:23   #17
devnir
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 26
По умолчанию

Home, ну на счет дистрибутива.. я вообще всторону Arch посматриваю последнее время, многие советуют
devnir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
клиент/серверное приложение + MySQL Vohakisa БД в Delphi 3 19.05.2010 11:20
Клиент-серверное приложение Куралай_ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 14.05.2010 10:00
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18
Клиент-серверное приложение: Callback MaTBeu Общие вопросы C/C++ 13 02.06.2008 20:27
Клиент-серверное приложение veryseldom Работа с сетью в Delphi 8 20.08.2007 19:57