【qt】基于tcp的客户端搭建

ui界面设计

我们给客户端提供服务器的ip地址,以及服务器的端口号
1.界面设计
在这里插入图片描述
2.修改对象名称

在这里插入图片描述

代码实现

断开按键的槽函数处理
在这里插入图片描述

转到槽,然后实现槽函数,直接关闭该窗口,就可以了


连接槽函数编写,首先要支持网络通信,在pro里面图示位置+network
在这里插入图片描述
加tcp头文件
在这里插入图片描述
在这里插入图片描述
在连接时需要connectToHost,我们可以在帮助里面查一下
在这里插入图片描述
我们需要调用connectToHost,所以我们需要定义一个QTcpSocket* socket,然后在构造函数中new一个QTcpSocket来调用connectToHost,做法如下:
在这里插入图片描述
在这里插入图片描述

客户端完整代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QTcpSocket>
#include<QString>
#include<QHostAddress>
#include<QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_closebutton_clicked();

    void on_connectbutton_clicked();

private:
    Ui::Widget *ui;
    QTcpSocket* socket;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    socket =new QTcpSocket;
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_closebutton_clicked()
{
    this->close();
}

void Widget::on_connectbutton_clicked()
{
    QString ip=ui->iplabel->text();
    QString port=ui->portlabel->text();

   socket->connectToHost(QHostAddress(ip),port.toShort());

   connect(socket,&QTcpSocket::connected,[this]()
   {

    QMessageBox::information(this,"连接提示","连接成功");


   });

   connect(socket,&QTcpSocket::disconnected,[this]()
   {

    QMessageBox::warning(this,"连接提示","连接异常");


   });


}

服务端代码

我直接给出了
main.cc

#include<iostream>
#include"tcpserver.hpp"
#include<memory>
#include<cstdio>
using namespace std;
int main(int argc,char*argv[])
{
  if(argc!=2)
  {
   cout<<"please:"<<"./server port[1024+]"<<endl;
  }
  uint16_t port=stoi(argv[1]);
  unique_ptr<tcpserver> ser(new tcpserver(port));
  ser->init();
  ser->run();
  return 0;
 


  
}

tcpserver.hpp

#pragma once 
#include<iostream>
#include<string>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<unistd.h>
#include<cstring>
using namespace std;
uint16_t defaultport=8080;
string defaultip="0.0.0.0";
const int backlog=5;
class tcpserver
{
public:
tcpserver(uint16_t& port=defaultport,string& ip=defaultip)
:sockfd_(0)
,tcpip_(ip)
,tcpport_(port)
{

}
void init()
{
 sockfd_=socket(AF_INET,SOCK_STREAM,0);
 if(sockfd_<0)
 {cout<<"创建套接字失败"<<endl;}
 cout<<"创建套接字成功"<<endl;


 //绑定
 struct sockaddr_in client;
 client.sin_family=AF_INET;
 client.sin_port=htons(tcpport_);
 //char str[32];
 inet_aton(tcpip_.c_str(),&client.sin_addr);
 int len=sizeof(client);


 if(bind(sockfd_,(const sockaddr*)&client,len)<0)
 {
   cout<<"绑定失败"<<endl;
   exit(1);

 }
   cout<<"绑定成功"<<endl;



   int n=listen(sockfd_,backlog);
   if(n<0)
   {cout<<"监听失败"<<endl;}
   cout<<"监听成功"<<endl;

}

void run()
{
  while(true)
  {
  struct sockaddr_in local;

  
   socklen_t len=sizeof(local);

  int sockfd=accept(sockfd_,(sockaddr*)&local,&len);
  if(sockfd>0){
    cout<<"三次握手成功"<<endl;
  

  }
       char buffer[4096];

    
  while(1)
  {
  int n=read(sockfd,buffer,sizeof(buffer));
  if(n>0)
  {
   buffer[n]=0;
   cout<<"client say#"<<buffer<<endl;



   string message="server say#";
   message+=buffer;
   cout<<message<<endl;



  write(sockfd,message.c_str(),message.size());


   }


  }





  
  
  











  }



}



~tcpserver()
{





}
private:

string tcpip_;
int sockfd_;
uint16_t tcpport_;







};

makefile

server:main.cc
	g++ -o server main.cc 
.PHONY:clean
clean:
	rm -rf server 

效果演示

tcp客户端

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在使用Qt搭建服务器和客户端来实现直播功能时,主要需要以下几个步骤: 1. 服务器端的搭建:首先,需要通过Qt创建一个服务器应用程序,为客户端提供直播数据流的传输。使用Qt的网络库类,如QTcpServer和QTcpSocket,可以实现对服务器的监听和接受客户端连接请求的功能。服务器端还需使用Qt的多线程类,如QThread,来处理多个客户端连接和直播数据的发送。 2. 客户端搭建:通过Qt创建一个客户端应用程序,用于接收服务器端传来的直播数据流并进行播放。使用Qt的网络库类,如QTcpSocket,客户端能够连接服务器,并接受直播数据流。客户端还可以使用Qt的多媒体类,如QMediaPlayer,来播放从服务器传来的直播数据。 3. 直播数据的传输:一般使用TCP协议来传输直播数据。服务器端将直播数据通过TCP socket发送给已连接的客户端,而客户端则通过TCP socket接收和解析这些数据,并使用多媒体类来播放直播内容。 4. 直播功能的实现:根据需求,还可以在程序中加入一些附加功能,例如客户端的聊天室、礼物赠送、直播间管理等功能。这些功能可以通过Qt的信号与槽机制、套接字通信及数据库的操作等方式来实现。 总体而言,通过使用Qt的网络库类和多媒体类,可以较为方便地搭建服务器和客户端来实现直播功能。在搭建过程中,需要注意处理多个连接和数据流传输的并发性,同时也需要考虑网络稳定性和性能优化等因素。 ### 回答2: 搭建服务器客户端来实现直播,我们可以使用Qt网络模块来实现。 首先,在服务器端,我们需要创建一个TCP服务器。我们可以使用`QTcpServer`类来创建一个服务器,然后使用`listen`函数指定服务器的地址和端口号。当有客户端连接到服务器时,服务器会自动调用`newConnection`信号槽。 在`newConnection`槽函数中,我们可以创建一个`QTcpSocket`对象来处理与客户端的通信。我们可以使用`write`函数向客户端发送直播数据,例如视频流。同时,我们还可以使用`readyRead`信号槽来接收客户端发送的消息或命令。 在客户端,我们需要创建一个TCP客户端来连接到服务器。我们可以使用`QTcpSocket`类来创建一个客户端,然后使用`connectToHost`函数指定服务器的地址和端口号。当成功连接到服务器后,我们可以使用`connected`信号槽来进行后续操作。 在客户端中,我们可以使用`readyRead`信号槽来接收服务器发送的直播数据。我们还可以使用`write`函数向服务器发送消息或命令。 当我们的服务器和客户端完成基本的连接和通信设置后,我们可以在服务器端使用多线程来处理多个客户端的连接和直播数据的传输。这样,我们就可以实现多个客户端同时观看直播。 总结起来,通过使用Qt的网络模块,我们可以搭建一个简单的服务器客户端系统来实现直播功能。服务器端负责接收客户端连接,并发送直播数据,而客户端则负责连接服务器并接收直播数据。这样我们就可以实现通过搭建服务器客户端来实现直播的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#小多子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值