网络通信(socket)

el/2024/4/13 15:29:35

 

服务端


scoket.h


#ifndef SOCKET_H
#define SOCKET_H#pragma execution_character_set("utf-8")
#include <QtGui/QWidget>
#include <QTcpServer> 
#include <QTcpSocket>
#include<QTextCodec>
#include "ui_socket.h"class Socket : public QWidget
{Q_OBJECTpublic:Socket(QWidget *parent = 0, Qt::WFlags flags = 0);~Socket();private:Ui::SocketClass ui;QTcpServer *tcpSever;//监听套接字QTcpSocket *tcpSocket; //通信套接字public slots:void fun();void get_message() ;void send_message();void close_clicked();
};#endif // SOCKET_H

 

scoket.cpp


#include "socket.h"Socket::Socket(QWidget *parent, Qt::WFlags flags): QWidget(parent, flags)
{ui.setupUi(this);setWindowTitle(QString::fromUtf8("服务端 ,端口8888"));tcpSocket = NULL;tcpSever = NULL;tcpSever = new QTcpServer(this) ;//监听地址,和8888端口tcpSever->listen(QHostAddress::Any, 8888) ;//如果有客户端连接成功,进入fun函数connect(tcpSever, SIGNAL(newConnection()), this, SLOT(fun()));
}Socket::~Socket()
{}void Socket::fun()
{//取出建立好的套接字tcpSocket = tcpSever->nextPendingConnection() ;//获取对方的IP和端口QString ip = tcpSocket->peerAddress().toString();qint16 prot = tcpSocket->peerPort();QString temp = QString(QString::fromUtf8("[%1:%2]:成功连接")).arg(ip).arg(prot);ui.textEditRead->setText(temp) ;//有消息发过来,就会触发readyRead信号connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(get_message())) ;
}void Socket::get_message()
{//将信号显示到read文本框QByteArray array = tcpSocket->readAll();ui.textEditRead->append(array);
}void Socket::send_message()
{//向socket写数据if(tcpSocket == NULL)return ;QString str = ui.textEditWrite->toPlainText();tcpSocket->write(str.toUtf8().data());
}void Socket::close_clicked()
{if(tcpSocket == NULL)return ;//断开连接tcpSocket->disconnectFromHost();tcpSocket->close();tcpSocket = NULL;
}

 

客户端


client.h

#ifndef CLIENT_H
#define CLIENT_H#pragma execution_character_set("utf-8")#include <QtGui/QWidget>
#include <QTcpSocket>
#include "ui_client.h"class Client : public QWidget
{Q_OBJECTpublic:Client(QWidget *parent = 0, Qt::WFlags flags = 0);~Client();private:Ui::ClientClass ui;QTcpSocket *tcpSocket;public slots:void set_message();void connect_to_sever();void send_message();void get_message();void close_clicked();
};#endif // CLIENT_H

client.cpp

#include "client.h"Client::Client(QWidget *parent, Qt::WFlags flags): QWidget(parent, flags)
{ui.setupUi(this);setWindowTitle(QString::fromUtf8("客户端")) ;tcpSocket = NULL;tcpSocket = new QTcpSocket(this);connect(tcpSocket, SIGNAL(connected()), this, SLOT(set_message())) ;connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(get_message()));
}Client::~Client()
{}void Client::set_message()
{ui.textEditReader->setText("succed connect");
}void Client::connect_to_sever()
{//获取服务器ip和端口QString ip = ui.lineEditIp->text();qint16 port = ui.lineEditprot->text().toInt();tcpSocket->connectToHost(ip, port);
}void Client::send_message()
{// 向socket写数据QString str = ui.textEditWrite->toPlainText();tcpSocket->write(str.toUtf8().data());
}void Client::get_message()
{QByteArray array = tcpSocket->readAll();ui.textEditReader->append(array);
}void Client::close_clicked()
{tcpSocket->disconnectFromHost();tcpSocket->close();
}

 


http://www.ngui.cc/el/3419426.html

相关文章

QT实现局域网通信(QUdpSocket)

界面 启动 vs2010 qt4.7.0如果提示缺少qtCore4.dll&#xff0c;需要将 .../qt4.7.0/lib/目录加入到环境变量机子必须在同一局域网下&#xff0c;使用ipconfig命令查找本机ipv4地址端口默认是8888&#xff0c;需要改的话将udp_socket->bind(8888) 这个改了 多个机子同时运行…

QT实现传输文件(tcpSocket)

界面截图 客户端 服务端 传输协议 源码 https://github.com/despicablee/transfer-file

LeetCode 1195. 交替打印字符串 (互斥量、条件量)

题目描述 编写一个可以从 1 到 n 输出代表这个数字的字符串的程序&#xff0c;但是&#xff1a; 如果这个数字可以被 3 整除&#xff0c;输出 "fizz"。 如果这个数字可以被 5 整除&#xff0c;输出 "buzz"。 如果这个数字可以同时被 3 和 5 整除&#xff…

How to listen to music for free

为了不被&#xff0c;&#xff0c;&#xff0c;特意用英语作为标题 获取链接&#xff1a; 在浏览器播放界面按F12&#xff0c;进入开发者模式 咪咕&#xff1a; 网易云&#xff1a; QQ音乐&#xff1a; 下载 复制你需要下载的歌曲的链接&#xff0c;浏览器里打开&#xff0c;会…

pdfium编译

前言 最近想试一下解析pdf文件&#xff0c;去查了查资料&#xff0c;发现别人编译好的dll我这里用不了 最终自己想试一下编译 此过程不需要科学上网 环境 我的本地环境 win7vs2010 由于拉的是github上的源码&#xff0c;看其文件是.gyp&#xff0c;于是乎需要安装gyp构建工具…

记录vscode内网无法建立ssh连接

右键remote-ssh->扩展设置->在setting.json中编辑&#xff1a; {"workbench.editor.enablePreview": false,"files.autoSave": "afterDelay","files.autoGuessEncoding": true,"files.associations": {"*.cgi&q…

leetcode 911在线选举

911. 在线选举 难度中等109 给你两个整数数组 persons 和 times 。在选举中&#xff0c;第 i 张票是在时刻为 times[i] 时投给候选人 persons[i] 的。 对于发生在时刻 t 的每个查询&#xff0c;需要找出在 t 时刻在选举中领先的候选人的编号。 在 t 时刻投出的选票也将被计…

c语言中三种循环的区别_用户5673143920_新浪博客

1.while循环while循环语句的基本语法while&#xff08;表达式&#xff09;&#xff5b;循环体&#xff1b;//或者称为语句块&#xff5d;特点:先计算表达式的值&#xff0c;然后根据表达式的值决定是否执行循环体中的语句&#xff0c;因此&#xff0c;如果表达式的值为假&#…

进制的表示及转换_用户5673143920_新浪博客

十进制&#xff1a;0-9表示&#xff1a;1234.51*1(3)2*19(2)3*1(1)4*1(0)5*1(-1)二进制&#xff1a;0-1表示&#xff1a; 01010110八进制&#xff1a;0-7表示&#xff1a;000 001 010 011 100 101 110 1110 1 2 3 4 5 6 7十六进制&#xff1a;0-9 a-f/A-F表示&am…

运算符及按位运算的使用_用户5673143920_新浪博客

运算符()提升优先级[]只用在数组中&#xff08;位运算&#xff09;针对二进制11 0000 101113 0000 1101&&&#xff1a;逻辑且&#xff1a;两个表达式都为真才为真&#xff08;表达式一为假&#xff0c;表达式二不计算&#xff09;11&&13&#xff1a;0000…