主题 : 改eddylau给的udp模板出现的问题 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 9088
精华: 0
发帖: 62
金钱: 380 两
威望: 118 点
综合积分: 124 分
注册时间: 2009-09-16
最后登录: 2017-09-13
楼主  发表于: 2010-04-02 15:39

 改eddylau给的udp模板出现的问题

我从论坛下了一个qtopia应用upd代码,并做了修改,原先是有两个button(send,recv);分别和两个插槽(sendslot,和recvslot)相连,那样一端按下send发送,令一端必须要按下recv才能接受;
我想把它改成像qq那样,一端按send发送,另一端自动显示,不过还是两个button(一个send,一个exit),改了*.ui和*.cpp,编译通过后,运行
#source /opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
#qvfb -width 640 -height 480 &
#./template -qws
不能运行,没有界面出来,我还是菜鸟,把代码贴出来,希望大家帮忙看看:
/**********************************************************
Author        : Lan Xin , xinlan_al@yahoo.com
//-------------------------------------------------------------------------
#include "template.h"


#include <qlabel.h>

#include <qpushbutton.h>

#include <qpixmap.h>
//#include <qgroupbox.h>
//#include <qtimer.h>
#include <qstring.h>
//#include <qlcdnumber.h>
#include <qlineedit.h>
//#include <qtimer.h>
//-------------------headers of hardware driver-----------------

#include <unistd.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>


//==============================================================
//----------------Constructor & Destructor Function-------------

MyHelloForm::MyHelloForm( QWidget* parent, const char* name, WFlags fl)

        :HelloBaseForm(parent, name, fl)

{
  
    strDestIP="192.168.1.108";//192.168.1.230
    strSrcIP ="192.168.1.230";//192.168.1.108



    eddy = new QPixmap("/opt/Qtopia/pics/yana3.JPG");

    connect(UdpSendPushButton,SIGNAL(clicked()),this,SLOT(UdpSend()));

    connect(UdpExitPushButton,SIGNAL(clicked()),this,SLOT(UdpExit()));

    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if(sockfd<0){        
    printf("socket creating err in udptalk\n");
    exit(1);
    }

    //-------------------------------------------------------------------
    socklen = sizeof(struct sockaddr_in);
    memset(&peeraddr, 0, socklen);
    peeraddr.sin_family=AF_INET;
    peeraddr.sin_port=htons(2000);
    if(inet_pton(AF_INET, strDestIP, &peeraddr.sin_addr)<=0){
        printf("Wrong dest IP address!\n");
        exit(0);
    PixmapLabel1->setText( "aae" );
    }
    //-------------------------------------------------------------------
    memset(&localaddr, 0, socklen);
    localaddr.sin_family=AF_INET;
    if(inet_pton(AF_INET, strSrcIP, &localaddr.sin_addr)<=0){
        printf("Wrong source IP address!\n");
        exit(0);
    PixmapLabel1->setText( "aae" );
    }
    localaddr.sin_port=htons(2000);
    //-------------------------------------------------------------------

    //===================================================================
    if(bind(sockfd, (struct sockaddr*)&localaddr, socklen)<0){    
        printf("bind local address err in al udptalk!\n");
        PixmapLabel1->setText( "bind local address err in al udptalk!\n" );
        exit(2);
    }


/*recv message loop*/
while(1){
    char recmsg[BUFLEN+1] = {0};  //初始化为0
    recvfrom(sockfd, recmsg, BUFLEN, 0, (struct sockaddr*)&peeraddr, (socklen_t*)&socklen);
    printf("peer:%s", recmsg);
    PixmapLabel1->clear();
    PixmapLabel1->setText( recmsg );    
    }


}





MyHelloForm::~MyHelloForm()

{
    close(sockfd);    

}


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//---------------------User defined function--------------------

void MyHelloForm::UdpSend()

{

    PixmapLabel1->clear();

    PixmapLabel1->setFrameStyle( QFrame::Panel | QFrame::Sunken );

    PixmapLabel1->setText( "UDP is sending Message" );

    PixmapLabel1->setAlignment( AlignCenter );



    strBuffer=LineEdit->text();

    if(sendto(sockfd, strBuffer, strlen(strBuffer), 0, (struct sockaddr*)&peeraddr, socklen)<0){
        printf("sendto err in udptalk!\n");
        PixmapLabel1->setText( "sendto err in udptalk!\n" );
        exit(3);
    }


}



void MyHelloForm::UdpExit()

{


close(sockfd);

}
级别: 侠客
UID: 9088
精华: 0
发帖: 62
金钱: 380 两
威望: 118 点
综合积分: 124 分
注册时间: 2009-09-16
最后登录: 2017-09-13
1楼  发表于: 2010-04-02 16:18

 改eddylau给的udp模板出现的问题

我知道了,接受显示那个while循环不能在构造函数里实现
[ 此帖被zhangcz在2010-04-02 18:44重新编辑 ]