java通过tcp协议与qt通信
来源:互联网 发布:mac下python开发环境 编辑:程序博客网 时间:2024/06/03 20:56
最近碰到一个项目,用qt写了一个服务器,java写客户端,然后客户端发送信息,请求服务器的数据。网上很多资料都是qt与qt通信,java与java通信,既然都是利用tcp协议,理论上也是可以进行java与qt的通信的,但是有许多细节需要注意。比如双方接收数据时都是使用byte数组 类型,另外qt发送数据时不能把QString插入数据流中,这样java端接收的数据就是一个空串。以下是我简化的一段代码,java客户端发送一个数据(比如 0001),qt服务器端发回java客户端处理后的数据(0001 is ok !)。代码如下:
qt服务器端
tcpserver.h
#ifndefTCPSERVER_H
#define TCPSERVER_H
#include <QTcpServer>
class TcpServer : public QTcpServer
{
Q_OBJECT
public:
explicit TcpServer(QObject *parent = 0, int port = 0);
signals:
private:
void incomingConnection(int socketDescriptor);
public slots:
};
#endif // TCPSERVER_H
tcpserver.cpp
#include"tcpserver.h"
#include "tcpsocket.h"
#include <QDebug>
TcpServer::TcpServer(QObject *parent, int port) :
QTcpServer(parent)
{
if( !this->listen(QHostAddress::Any, port) ) {
//if( !this->listen()) {
qDebug() << "Server listen fail";
exit(1);
}
//port = this->serverPort();
qDebug() << "Port: " << port;
qDebug() << "Server listening......";
//while(1);
}
void TcpServer::incomingConnection(int socketDescriptor)
{
TcpSocket *socket = new TcpSocket(this);
socket->setSocketDescriptor(socketDescriptor);
}
tcpsocket.h
#ifndefTCPSOCKET_H
#define TCPSOCKET_H
#include <QTcpSocket>
class TcpSocket : public QTcpSocket
{
Q_OBJECT
public:
explicit TcpSocket(QObject *parent = 0);
signals:
private:
QString msg;
void sendResponse();
private slots:
void dataReceived();
};
#endif // TCPSOCKET_H
tcpsocket.cpp
#include"tcpsocket.h"
#include <QByteArray>
#include <QVariant>
#include <QDebug>
#include <QTime>
TcpSocket::TcpSocket(QObject *parent) :
QTcpSocket(parent)
{
connect(this,SIGNAL(readyRead()),this,SLOT(dataReceived()));
}
void TcpSocket::dataReceived()
{
//qDebug() << "Hello data";
QByteArray qdb = this->readAll();
QString ss = QVariant(qdb).toString();
this->msg = ss;
//qDebug() << this->msg;
QString curTime = QTime::currentTime().toString("hh:mm:ss");
QString str = curTime + " : " + this->msg + " tested";
qDebug() << str;
this->sendResponse();
}
void TcpSocket::sendResponse()
{
QString response = this->msg + " is ok !";
this->write(response.toStdString().c_str(),strlen(response.toStdString().c_str()));
disconnectFromHost();
waitForDisconnected();
}
main.cpp#include<QApplication>
#include "tcpserver.h"
int main(int argc,char *argv[])
{
QApplication a(argc,argv);
int port = 8010;
TcpServer *tcpServer = new TcpServer(0, port);
return a.exec();
}
最后在pro文件中添加QT += network即可
此时,qt客户端程序已经写好,本人已经测试成功。
java客户端
SocketUtil.java
import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.net.Socket;
public class SocketUtil {
public static void main(String[] args) {
//String str = null;
Socket clientSocket;
DataInputStream in = null;
DataOutputStream out = null;
try {
clientSocket = new Socket("127.0.0.1",8010);
in = new DataInputStream(clientSocket.getInputStream());
out = new DataOutputStream(clientSocket.getOutputStream());
//out.writeUTF("hello");
// out.writeUTF("0001");
// out.write("0001");
//out.writeBytes("1000");
//out.writeChars("0001");
String temp=new String("0003");
out.write(temp.getBytes("UTF-8"));
System.out.println("Hello");
byte[] by = new byte[1024];
in.read(by);
//System.out.println(by);
String str1 = new String(by);
System.out.println(str1);
//System.out.println("End");
in.close();
out.close();
/*
while(true) {
str = in.readUTF();
//out.writeUTF(((int) (Math.random()*10) +1) + "");
System.out.println("Client:" + str);
}
*/
}catch(Exception e) {
e.printStackTrace();
}
}
}
至此,java客户端也已经写完。测试成功。
以下是运行结果:
java客户端:
qt服务器端:
- java通过tcp协议与qt通信
- JAVA 通过 Socket 实现 TCP协议的通信
- Socket: 通过TCP协议进行通信
- Qt与Java实现Tcp网络通信,收发简单字符串。
- JAVA实现与Linux通信(通过SSH协议)
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- linux 网络编程:客户端与服务器通过TCP协议相互通信
- linux 网络编程:客户端与服务器通过TCP协议相互通信
- 通过TCP/IP协议进行客户端与服务端的通信C/C++
- JAVA中Socket编程(一)---通过TCP协议实现通信
- Java通信编程中调用UDP协议与TCP协议之间的不同
- TCP/IP协议与Socket通信
- TCP/IP协议与Socket通信
- Unity3D与Node.js通过TCP通信.
- TCP、UDP协议,java网络通信基础
- java通过Socket实现TCP网络通信
- 基于QT的TCP协议实现的通信小程序
- Qt开发——TCP协议下的socket通信
- Java学习笔记之泛型
- E洗车高调推399保养,重组汽车后市场格局
- oracle sql操作xml
- 高斯消元专题
- HTML 5 学习笔记
- java通过tcp协议与qt通信
- Node.js错误处理最佳实践
- jspsmart上传文件
- jquery datatables 行放大效果--增加tooltip
- 博弈概述
- 企业打包时不能安装常见原因
- adb获取IMIE号
- JDK 安装代替默认1.6(Mac)
- x86寄存器说明