QT 的socket 与 Linux 的socket通信Linux

QT 的socket 与 Linux 的socket通信Linux
程序设计 2010-05-06 22:42:09 阅读81 评论1 字号:大中小
其实这两者间的通信跟Linux的socket间通信没什么区别。

客户端:

//client.h

#ifndef CLIENT_H
#define CLIENT_H

#include
#include
#include
#include

class Client : public QObject
{
Q_OBJECT
public:
Client(QObject* parent = 0);
~Client();
void start(QString address, quint16 port);

public slots:
void startTransfer();
void startRead();
void connectError(QAbstractSocket::SocketError);

private:
QTcpSocket client;

};

#endif // CLIENT_H



// client.cpp

#include "client.h"
#include
#include
#include
using namespace std;

Client::Client(QObject *parent) : QObject(parent)
{
connect(&client, SIGNAL(connected()),
this, SLOT(startTransfer()));
connect(&client, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(connectError(QAbstractSocket::SocketError)));
connect(&client, SIGNAL(readyRead()),
this, SLOT(startRead()));
}

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

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

void Client::startTransfer()
{
client.write("Hello world!", 13);
}

void Client::connectError(QAbstractSocket::SocketError)
{
char error[100] = "connect error!";
cout << error << endl;
}

void Client::startRead()
{
char buffer[100] = {0};
client.read(buffer, client.bytesAvailable());
cout << "server say:" << buffer << endl;
client.close();
}



//main.cpp

#include "client.h"
#include

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

Client client;
client.start("127.0.0.1", 8888);

return app.exec();
}


服务器端:

//main.cpp

#include
#include
#include
#include
#include
#include
#include
#include
#include

int main(void)
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
//int result;

server_sockfd = socket(AF_INET, SOCK_STREAM, 0);

server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = htons(8888);
server_len = sizeof(server_address);

bind(server_sockfd, (struct sockaddr *)&server_address, server_len);

signal(SIGCHLD, SIG_IGN);

listen(server_sockfd, 5);

while(1) {
char *ch = "string from server";
char buf[13];

printf("server waiting\n");
client_len = sizeof(client_address);
client_sockfd = a

ccept(server_sockfd,
(struct sockaddr* )&client_address, (socklen_t *)&client_len);

printf("the socket is %d", client_sockfd);
if(fork() == 0) {
read(client_sockfd, buf, sizeof(buf));
printf("client say:%s", buf);
write(client_sockfd, ch, strlen(ch));
close(client_sockfd);
return 0;
}
else {
close(client_sockfd);
}
}

}


相关文档
最新文档