2017-10-10 3 views
2

클라이언트에서 서버로 간단한 메시지를 보내고 올바르게 작동하지만 클라이언트가 서버 시스템 날짜 및 시간을 가져 오려고하면 어떻게해야합니까? 내가 수행하는 방법에 어떤 생각이없는소켓 프로그래밍을 사용하여 시스템 날짜 및 시간을 얻는 방법

Client::Client(QObject* parent): QObject(parent) 
{ 
    connect(&client, SIGNAL(connected()), 
    this, SLOT(startTransfer())); 
} 

Client::~Client() 
{ 
    client.close(); 
} 

void Client::start(QString address, quint16 port) 
{ 
    QHostAddress addr(address); 
    client.connectToHost(addr, port); 
} 

void Client::startTransfer() 
{ 
    client.write("Hi server this is client", 80); 
} 

Client 

mainwindow.cpp 내가 QT C++의 새로운 나처럼.

server 

MAIN.CPP

#include "mainwindow.h" 
    #include <QApplication> 



    int main(int argc, char** argv) 
    { 
    QApplication app(argc, argv); 
    Server server; 
    return app.exec(); 
    } 
+0

당신에게 수행 MEA n * local * 시스템 날짜와 시간? 아니면 * 원격 * 시스템의 것입니까? –

+0

클라이언트가 서버 시간을 가져올 수 없으면 패킷과 함께 보내야합니다.'QDateTime dateTime = dateTime.currentDateTime();'및 QString dateTimeString = dateTime.toString ("yyyy-MM-dd_hh-mm-ss"); – aghilpro

+0

@aghilpro 어떻게 말해 줄 수 있습니까? 나는 당신의 코드로 메시지를 대체하고 서버로 보내는 것 뿐이다. – explorer104

답변

1

난 당신이 해제 코드의이 부분은 클라이언트 측, 당신은 일반적인 손 흔들어 같은 서버에 클라이언트의 요청을 제공해야한다 생각합니다.

서버 측에서는 클라이언트가이를 인식하고 보낼 수있는 특정 형식으로 날짜/시간을 제공합니다. 클라이언트/서버 프로그래밍 Local Fortune ClientLocal Fortune Server 예제에서 더 많이 사용됩니다.

여기에 클라이언트 측 간단한 예입니다

void Client::startTransfer() 
{ 
    client.write("Hi server send time"); 
    client.flush(); 
    client.waitForBytesWritten(300); 
} 

하고 서버 측 예 : 서버

newconnection에 슬롯이 클라이언트 메시지와 같은 슬롯에 클라이언트 데이터를 연결합니다.

void ServerSocket::newConnection() 
{ 
    QTcpSocket *clientsocket = mserver->nextPendingConnection(); 
    connect(clientsocket , SIGNAL(readyRead()) , this , SLOT(clientMessage())); 
} 

및 슬롯 클라이언트의 메시지에 응답 여기

void ServerSocket::clientMessage() 
{ 
    QTcpSocket* client = (QTcpSocket*)sender(); 
    QString message(client->readAll()); 
    if (message == "Hi server send time") 
    { 
     client->write(QDateTime::currentDateTimeUtc().toString().toLatin1()); 
     client->flush(); 
     client->waitForBytesWritten(300); 
    } 
} 

요청 완전한 코드 :

servesocket.h는

#ifndef SERVERSOCKET_H 
#define SERVERSOCKET_H 

#include <QObject> 
#include <QDebug> 
#include <QTcpServer> 
#include <QTcpSocket> 

class ServerSocket : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit ServerSocket(QObject *parent = nullptr); 
    QTcpServer *mserver; 

signals: 

public slots: 

    void newConnection(); 
    void clientMessage(); 

}; 

#endif // SERVERSOCKET_H 

serversocket.cpp

#include "serversocket.h" 
#include <QDateTime> 

ServerSocket::ServerSocket(QObject *parent) : QObject(parent) 
{ 
    mserver = new QTcpServer(this); 
    mserver->connect(mserver , SIGNAL(newConnection()) , this , SLOT(newConnection())); 
    if(!mserver->listen(QHostAddress::Any , 1234)) 
    { 
     qDebug() << "Server initilize failed"; 
    } 
} 

void ServerSocket::newConnection() 
{ 
    QTcpSocket *clientsocket = mserver->nextPendingConnection(); 
    connect(clientsocket , SIGNAL(readyRead()) , this , SLOT(clientMessage())); 
} 

void ServerSocket::clientMessage() 
{ 
    QTcpSocket* client = (QTcpSocket*)sender(); 
    QString message(client->readAll()); 
    if (message == "Hi server send time") 
    { 
     client->write(QDateTime::currentDateTimeUtc().toString().toLatin1()); 
     client->flush(); 
     client->waitForBytesWritten(300); 
    } 
} 

MainWindow를 헤더

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QLineEdit> 
#include <QMainWindow> 
#include <QSerialPort> 

#include "serversocket.h" 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0);//:QMainWindow(parent) 
    ~MainWindow(); 

private slots: 



private: 
    Ui::MainWindow *ui; 
    ServerSocket * server; 

}; 

#endif // MAINWINDOW_H 

MainWindow를의 CPP

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

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 
+0

@ explorer104 완전한 코드를 원한다면, – saeed

+0

예, 제발 완전한 코드가 필요합니다. 감사합니다. – explorer104

+0

@ explorer104 서버 헤더/cpp 파일을 추가했습니다. 클라이언트 메시지 요청을 보여주는 간단한 서버 일뿐입니다. 추가 질문이 있으시면 언제든지 문의하십시오. – saeed

1

클라이언트에서 서버 시스템 날짜/시간을 얻을 수있는 방법은 없습니다 ... 사전에 정말 감사합니다.

패킷으로 보내야합니다.

void Client::startTransfer() 
{ 
    QDateTime dateTime = dateTime.currentDateTime(); 
    QString dateTimeString = dateTime.toString("yyyy-MM-dd_hh-mm-ss"); 
    // send "dateTimeString" here 
} 
+0

@ explorer104 날짜/시간을 보내야합니다. 첫 번째 연결에서 날짜/시간을 보내고 서버와 클라이언트를 함께 동기화 할 수 있습니다. 또는 패킷 요청을 보내고 날짜/시간을 가져올 수 있습니다. – aghilpro

+0

감사합니다. 이제 우리가 보낸 패킷에 대해 서버가 어떻게 클라이언트에 응답 할 것인가? – explorer104

+0

@ explorer104 클라이언트는 자신의 요청을'client.write ("Req_Date_time");'로 보내고 서버는이를 수신하여 올바른지 확인하고 내 대답처럼 날짜/시간을 되돌려 보냅니다. – aghilpro