Qt tcp通信简单实现
来源:互联网 发布:clover软件 编辑:程序博客网 时间:2024/04/29 10:53
功能:Qt前台界面作为客户端,linux后台程序作为服务端,客户端发送字符串给服务端,服务端返回大写
前台界面实现:通过Qt designer生成
(地址映射:10.200.1.46:19961 -> 172.18.18.99:9961)
10.200.1.46:19961(windows本机访问linux服务端对外地址端口)
172.18.18.99:9961(linux服务端地址端口)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
dialog.h:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QTcpSocket>
#include <QHostAddress>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_pushButton1_clicked();
void recvMsg();
void displayError(QAbstractSocket::SocketError);
private:
Ui::Dialog *ui;
QTcpSocket *tcpSocket;
};
#endif // DIALOG_H
--------------------------------------------------------------------------------------------------------------------------
dialog.cpp:
#include "dialog.h"#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog){ui->setupUi(this);tcpSocket = new QTcpSocket(this);ui->lineEdit->setText("10.200.1.46");ui->lineEdit_2->setText("19961");connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError)));connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton1_clicked()));connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(recvMsg()));}Dialog::~Dialog(){delete ui;}void Dialog::on_pushButton1_clicked(){QString port;int port_Int;port = ui->lineEdit_2->text();port_Int = port.toInt();tcpSocket->connectToHost(QHostAddress(ui->lineEdit->text()), port_Int);if(!tcpSocket->waitForConnected(2)){
tcpSocket->disconnectFromHost();return;}
QTextStream out(tcpSocket);out << ui->lineEdit_3->text() <<endl;}void Dialog::recvMsg(){QString res;res += tcpSocket->readAll();ui->textEdit->setText(res);ui->textEdit->moveCursor(QTextCursor::End);tcpSocket->disconnectFromHost();}void Dialog::displayError(QAbstractSocket::SocketError){//qWarning("this is err!");qDebug() << tcpSocket->errorString();}-----------------------------------------------------------------------------------------------------------------------
main.cpp:
#include "dialog.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);Dialog w;w.show();
return a.exec();}
linux 后台服务端代码:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/socket.h>#include <arpa/inet.h>#define RCV_BUF_LEN 1024int main(int ac, char **av){ int sock; int client_Sock; int ret; char inputBuf[1024]; char recvBuf[RCV_BUF_LEN]; struct sockaddr_in svrAddr; int i; int val; /** 创建监听套接字 **/ if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("socket error!\n"); return -1; } /** 指定监听端口和地址 **/ memset(&svrAddr, 0x00, sizeof(svrAddr) ); svrAddr.sin_family =AF_INET; svrAddr.sin_addr.s_addr = htonl( INADDR_ANY ); svrAddr.sin_port = htons(9961); setsockopt(sock,SOL_SOCKET,SO_REUSEADDR, (char *)&val, sizeof(val)); /** 绑定监听套接字和端口 **/ if(bind(sock, (struct sockaddr *)&svrAddr, sizeof(svrAddr)) != 0 ) { printf("bind error!\n"); return -1; } /** 监听套接字 */ if(listen( sock, 10 ) != 0) { printf("listen error!\n"); return -1; } while(1) { /** 等待连接请求 **/ printf("等待客户端连接请求..\n"); if((client_Sock = accept(sock, NULL, 0)) < 0) { printf("accept error!\n"); return -1; } printf("客户端已连入..\n"); while(1) { memset(recvBuf, 0x00, RCV_BUF_LEN); ret = recv( client_Sock, recvBuf, RCV_BUF_LEN, 0); //printf("strlen(recvBuf) = %d\n", strlen(recvBuf)); recvBuf[strlen(recvBuf) - 1] = 0;//0 ASCII 对应 空字符 if(ret > 0) { printf("接收到:[%s]\n", recvBuf); for(i = 0; i < strlen(recvBuf); i++ ) { if(recvBuf[i] > 96 && recvBuf[i] < 123) { recvBuf[i] -= 32; } } ret = send(client_Sock, recvBuf, strlen(recvBuf), 0 ); if(ret > 0) { printf("处理并返回成功..\n"); } else if(ret < 0) { printf("返回客户端错误..\n"); } } else if (ret == 0) { printf("客户端断开..\n"); break; } else { printf("rcv error!\n"); break; } } } return 0;}
----------------------------------------------------------------------------------------------------------------------
前台运行界面:
后台运行结果:
[gfj@KFJK c]$ gcc qt_server.c
[gfj@KFJK c]$ ./a.out
等待客户端连接请求..
客户端已连入..
接收到:[guifujieGUIfuJIE]
处理并返回成功..
客户端断开..
等待客户端连接请求..
0 1
- Qt tcp通信简单实现
- QT之TCP通信简单实现
- Qt-----实现Tcp通信
- Qt与Java实现Tcp网络通信,收发简单字符串。
- qt在实现tcp通信
- Qt 简单的 tcp socket 通信流程
- qt tcp socket简单的通信程序
- Qt编写简单Tcp通信server端
- Qt学习之TCP简单通信
- Qt实现TCP通信简例
- 一个简单Tcp通信的实现
- [MFC]TCP通信的简单实现
- TCP协议实现网络通信简单例子
- QT5实现简单的TCP通信
- QT5实现简单的TCP通信
- Socket TCP通信简单实现与文件传输
- 基于TCP协议的简单通信实现
- QT 简单的网络通信(tcp ,udp)
- 文本域组件JTextArea
- scikit入门学习笔记
- POJ 3686_The Windy's
- 每天一个linux命令(60):scp命令 【转】
- 计算机网络
- Qt tcp通信简单实现
- MXNet设计笔记之:深度学习的编程模式比较
- Struts2基础(web.xml文件)
- HTML中的路径问题
- 第三章 十一节——流程
- C++设计模式之原型模式
- windows下面安装Python和pip教程
- 排序算法-归并排序
- R语言 社会保障对城乡家庭消费的影响研究