Windows平台下實現Qt的UDP通訊

來源:互聯網
上載者:User

Windows平台下實現Qt的UDP通訊



今天我們用Qt實現UDP通訊,模擬器發送訊息到主機,主機顯示出來。很簡單。



1.

我們先完成主機的部分,用VS2005完成,下面的代碼不多解釋了:

#include <stdio.h>#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#define SERVER_PORT 45454int main(){  /* init winsock */  WSADATA wsaData;    if(WSAStartup(MAKEWORD(2,1), &wsaData))  {     printf("winsock init failed!\n");    return 1;  }  struct sockaddr_in local;  struct sockaddr_in from;  int len = sizeof(struct sockaddr_in);  local.sin_family = AF_INET;  local.sin_port = htons(SERVER_PORT); /* 監聽連接埠 */  local.sin_addr.s_addr = INADDR_ANY;  /* 本機 */  /* create udp socket  */  SOCKET sock_fd = socket(AF_INET, SOCK_DGRAM, 0);  bind(sock_fd, (struct sockaddr *)&local, sizeof(local));  char buffer[1024];  int size;  while(1)  {    buffer[0] = '\0';    printf("waiting...\n");    size = recvfrom(sock_fd, buffer, sizeof(buffer), 0, (struct sockaddr *)&from, &len);    if(size != SOCKET_ERROR)    {      buffer[size] = '\0';      printf("From %s: \n%s\n", inet_ntoa(from.sin_addr), buffer);    }  }  closesocket(sock_fd);  WSACleanup();  return 0;}



2.

然後完成Qt部分。建立一個“Qt Gui 應用”:



輸入“udpsender”:




三個平台都選擇:




選擇QWidget:




建立完成!



3.

修改widget.ui,添加一個Text Edit,id為textSend;添加一個PushButton,id為btnSend:




4.

修改widget.h如下,主要是加入了QUdpSocket:

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QtNetwork/QUdpSocket>namespace Ui {    class Widget;}const QString SERVER_ADDR = "127.0.0.1";const int SERVER_PORT = 45454;class Widget : public QWidget{    Q_OBJECTpublic:    explicit Widget(QWidget *parent = 0);    ~Widget();private:    Ui::Widget *ui;    QUdpSocket *udpSocket;private slots:    void sendText();};#endif // WIDGET_H


說明:上面的SERVER_ADDR是原生ip地址,你可以替換成區域網路裡的另一台主機的ip地址。另外SERVER_PORT需要和第一步Windows主機的連接埠相同。



5.

修改widget.cpp如下:

#include "widget.h"#include "ui_widget.h"#include <QByteArray>Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);    udpSocket = new QUdpSocket(this);    QObject::connect(ui->btnSend, SIGNAL(clicked()), this, SLOT(sendText()));}Widget::~Widget(){    delete ui;}void Widget::sendText(){    QByteArray datagram = ui->textSend->toPlainText().toAscii();    udpSocket->writeDatagram(datagram, datagram.size(), QHostAddress(SERVER_ADDR), SERVER_PORT);}

6.

最後修改udpsender.pro如下:

#-------------------------------------------------## Project created by QtCreator 2012-06-07T12:54:34##-------------------------------------------------QT       += core guiTARGET = udpsenderTEMPLATE = appSOURCES += main.cpp\        widget.cppHEADERS  += widget.hFORMS    += widget.uiQT       += networkCONFIG += mobilityMOBILITY = symbian {    TARGET.UID3 = 0xe7254336    # TARGET.CAPABILITY +=     TARGET.EPOCSTACKSIZE = 0x14000    TARGET.EPOCHEAPSIZE = 0x020000 0x800000}


注意,Qt += network這句非常重要!另外,TARGET.UID3可以不用修改



7.

最後選擇目標為“Qt 模擬器”,運行結果如下:




8.

移植到手機中運行:由於我的Nokia 5230不支援wifi,所以我得換另一個手機,這裡先空著:










最後我把代碼也上傳上來了:





完成!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.