1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <QtGui>
#include <QtNetwork>
#include "logwriter.h"
LogWriter::LogWriter(QWidget *parent) :
QDialog(parent) {
hostLabel = new QLabel(tr("Message:"));
hostLineEdit = new QLineEdit("fortune");
serverName = "/var/tmp/qt_c_socket_test";
hostLabel->setBuddy(hostLineEdit);
statusLabel = new QLabel(tr("This examples requires that you run the "
"LogReceiver example as well."));
connectToLogReceiver = new QPushButton(tr("Connect"));
connectToLogReceiver->setDefault(true);
quitButton = new QPushButton(tr("Quit"));
writeButton = new QPushButton(tr("Write"));
buttonBox = new QDialogButtonBox;
buttonBox->addButton(connectToLogReceiver, QDialogButtonBox::ActionRole);
buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
buttonBox->addButton(writeButton, QDialogButtonBox::ActionRole);
connect(hostLineEdit, SIGNAL(textChanged(QString)), this,
SLOT(enableWriteButton()));
connect(connectToLogReceiver, SIGNAL(clicked()), this,
SLOT(requestNewFortune()));
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
connect(writeButton, SIGNAL(clicked()), this, SLOT(writeToLogReceiver()));
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(hostLabel, 0, 0);
mainLayout->addWidget(hostLineEdit, 0, 1);
mainLayout->addWidget(statusLabel, 2, 0, 1, 2);
mainLayout->addWidget(buttonBox, 3, 0, 1, 2);
setLayout(mainLayout);
setWindowTitle(tr("Fortune Client"));
hostLineEdit->setFocus();
}
LogWriter::~LogWriter() {
}
void LogWriter::requestNewFortune() {
struct sockaddr_un serv_addr;
connectToLogReceiver->setEnabled(false);
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sockfd < 0)
qDebug() << "ERROR opening socket" << strerror(errno);
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path, "/var/tmp/qt_c_socket_test");
if (::connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
qDebug() << "ERROR connecting" << strerror(errno);
}
void LogWriter::readFortune() {
}
void LogWriter::displayError(QLocalSocket::LocalSocketError socketError) {
}
void LogWriter::enableWriteButton() {
writeButton->setEnabled(!hostLineEdit->text().isEmpty());
}
void LogWriter::writeToLogReceiver() {
//char buffer[256];
char *b = "test";
qDebug() << strlen(b);
int n = ::write(sockfd,b,strlen(b));
if (n < 0)
qDebug() <<"ERROR writing to socket";
}
|