当前位置:  编程技术>移动开发
本页文章导读:
    ▪iPad 3g版圆满实现打电话功能(phoneitipad破解)        iPad 3g版完美实现打电话功能(phoneitipad破解)看到这个标题,有的同学可能吐槽,iPad 用来打电话,多雷人啊,人家apple设计的时候没加电话功能是故意这样做的。 不过这次真的有这样的需求,.........
    ▪ 关于wp7中http的GetResponse抛错误的有关问题        关于wp7中http的GetResponse抛异常的问题昨天使用了http请求服务,用的是HttpWebRequest来创建的http连接。 结果总是在获取服务器响应状态时出现异常,下面是出异常的代码: try .........
    ▪ fedora14 基于Qt的TCP发送文本信息 聊天室 开发记要       fedora14 基于Qt的TCP发送文本信息 聊天室 开发记录      TCP协议部分,还真让我迷糊了好大一会。原因是刚弄完UDP,UDP的本地端和远程端代码是完全一样的。只是初始化在构造函数里,绑定.........

[1]iPad 3g版圆满实现打电话功能(phoneitipad破解)
    来源: 互联网  发布时间: 2014-02-18
iPad 3g版完美实现打电话功能(phoneitipad破解)

看到这个标题,有的同学可能吐槽,iPad 用来打电话,多雷人啊,人家apple设计的时候没加电话功能是故意这样做的。 不过这次真的有这样的需求,一台测试用的iPad 1 3G版的机器,放进去了一张3G电话卡,可能是卡槽怀了还是怎么回事,电话卡死活拿不出来,这是个新卡还没设置密码,完了这个卡又设置密码打账单,怎么办,卡不出来了,只能将计就计,用iPad打电话 设置密码了。

PhoneItiPad 有这么一款软件能实现iPad打电话功能。网址是:http://www.iphoneislam.com/phoneitipad/ 不过要花钱买的,大概130块RMB。咱们当然是不花钱了,肯定是要破解来用。

我这台测试的是iPad 1  系统是 4.3.1,系统已经越狱,没越狱的就这个教程用不了。

那么下面开始步骤吧,这些教程大部分是参考网上的教程,不过也遇到了很多自己特有的问题。

1、下载PhoneItiPad

去哪下载呢?在iPad上打开cydia, 在软件源里点编辑,添加 apps.iphoneislam.com,添加成功后是下面这样的:



点击进入iPhonelslam源,在最下边可以看到PhoneIt-iPad对应4.3.3和5.0的两个版本。我的系统是4.3.1的,不是4.3.3,点下载安装,提示版本号不对,不让安装,那怎么办?

1.1 修改IOS系统版本号

这TM也可以改?是的,越狱后,这也可以改。

1.1.1修改ios版本号。可以用91助手,itools等pc端工具修改,但是修改后需重启,这里建议大家用ifile修改,文件路径:/System/Library/CoreServices/SystemVersion.plist  用记事本打开后,如修改为4.3.3 就把里面其他版本号修改为4.3.3  英文版本号修改为8J3  ,然后保存关闭。此时在本机上看到ios版本已经是4.3.3,但是打开cydia还是原来真实版本号。这时开始第2步。
1.1.2修改cydia显示版本号

这步比较简单,进入cydia,选择bigboss源里面的Action menu,免费的。安装完以后,重启手机进入cydia

1.2 开始下载PhoneItiPad

现在cydia认为我是4.3.3了,在设置里看系统版本号也是4.3.3,嘿嘿。就可以下载了,本来以为下载安装很简单,结果差点就开始再这里,下载了7到8次,都提示下载错误,

网速慢的原因?还是其他原因,我在打算再下载一次如果还是不成功的话我就放弃了,结果最后一次下载成功安装成功了。安装完后会提示重启。那就重启吧。下载安装成功了软件还不能用,因为是收费的啊。那就开始破解吧。

2 、破解软件:2.1  将文件FixPhone.dylib上传到ipad的/Library/MobileSubstrate/DynamicLibraries目录下(用91助手。ITOOL工具均可以)

文件我传到CSDN的资源里了,免积分下载地址:http://download.csdn.net/detail/totogo2010/4483283

2.2检查/Applications/PhoneItiPad.app/PhoneItiPad的访问权限,如果有S位,iFile里叫粘滞位,把它取消。看图




2.3.点击PhoneItIpad图标,会出现让你重启的提示,如下图,(如果没有安装成功。提示的就是BUY IT NOW),不要重启,直接点击HOME回到桌面。

2.4.直接把/System/Library/CoreServices/SpringBoard.app/K48AP.plist       直接把K48AP.plist这个文件删除.


2.5 把/System/Library/CoreServices/SpringBoard.app/K48AP.plist.active 后面的.active删除



2.6  好了,点击HOME退出,这时候你的IPHONEITIPAD图标消失,会多出一个短信消息的图标,一个电话的图标。打开电话,就能像IPhone一样的打电话了,短信也能收到了


看到红色框框的图标了吧?就是电话短信的图标,当然两个图标不是自然在那里的,是拖动后放在那的。
打个电话试试

电话打通了。 上面都是我的真实截图哦。短信就不演示了。

著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!



    
[2] 关于wp7中http的GetResponse抛错误的有关问题
    来源: 互联网  发布时间: 2014-02-18
关于wp7中http的GetResponse抛异常的问题

昨天使用了http请求服务,用的是HttpWebRequest来创建的http连接。

结果总是在获取服务器响应状态时出现异常,下面是出异常的代码:

            try
            {
                HttpWebRequest request = ar.AsyncState as HttpWebRequest;
                HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse;
                using (var stream = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(stream);
                    string msg = reader.ReadToEnd();
                }
            }
            catch (Exception e)
            {
                string a = e.ToString();
            }

在执行
HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse;
这一句时报异常:The remote server returned an error: NotFound.


参考了部分资料,仍然是解决不了这个问题。

后来调整了post请求中的参数,竟然好了,返回状态码终于是200。

主要原因是服务器这边对post参数字段有一些特定的要求,比如必须是多少长度,或者不能遗漏哪个字段等等。


奇怪的是,如果是参数错误的话,接收的状态码应该是601(本服务器定义的状态码,指非法参数),但是它直接抛异常了;然而HttpStatusCode中的枚举量是没有这个值的(2XX 至 5XX),不知道是不是这个问题导致出现的异常。






    
[3] fedora14 基于Qt的TCP发送文本信息 聊天室 开发记要
    来源: 互联网  发布时间: 2014-02-18
fedora14 基于Qt的TCP发送文本信息 聊天室 开发记录

      TCP协议部分,还真让我迷糊了好大一会。原因是刚弄完UDP,UDP的本地端和远程端代码是完全一样的。只是初始化在构造函数里,绑定的本地Ip地址不同,这点有函数getIp()自动完成。因此本地和远程完全一样。但Tcp部分不是这样,我这里总结一下(本人水平很低级的,属菜鸟未入门级。总结下只是防自己忘):

一,服务器端:

       整个工作流程是:如下图:

     

   程序的核心部分在tcpNewConnect()这个函数里,当服务器收到连接时会触发这个槽函数。这个函数实现为:

//服务器监听到客户端连接时,服务器的响应槽函数
void Widget::tcpNewConnect()
{
    QMessageBox box;
    box.setText("tcp客户端,请求连接....");
    box.exec();
    tcpsocketServer = tcpServer->nextPendingConnection();
    connect(tcpsocketServer, SIGNAL(readyRead()), this, SLOT(tcpReadmesg()));
    connect(ui->tcpSendButton, SIGNAL(clicked()), this, SLOT(tcpSendmesg()));
    ui->tcpSendButton->setEnabled(true);

}

这个时候tcpsocketServer被实例化了,tcpsocketServer是一个QTcpSocket类型的,我为了区别客户端的tcpSocket给加了后缀server。 也就是说tcpServer的作用仅仅是监听,监听到了就实例化一个QTcpSocket,剩下的工作由这个QTcpSocket来完成,包括接收信息和发送信息。

//TCP端的接收信息并显示槽函数
void Widget::tcpReadmesg()
{
    QTextCodec *tc=QTextCodec::codecForName("UTF-8");
    QByteArray data = tcpsocketServer->readAll();
    QString str = tc->toUnicode(data);


    QDateTime time;
    QString timeStr = time.currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");


    autoScroll();
    ui->getTextEdit->setTextColor(QColor("red"));
    ui->getTextEdit->insertPlainText("远程" + remoteIpStr+": "+ timeStr +"--TCP--\n" );
    ui->getTextEdit->setTextColor(QColor("black"));
    ui->getTextEdit->insertPlainText(str + "\n" );
    autoScroll();
}


//TCP端的发送文本槽函数
void Widget::tcpSendmesg()
{
    autoScroll();
    QString str = ui->sendTextEdit->toPlainText();
    if(str.length()==0)
    {
        QMessageBox box;
        box.setText("请输入内容后再发送!");
        box.exec();
    }
    else
    {
        QByteArray data = str.toAscii();
        // qDebug()<<str;
        tcpsocketServer->write(data);
        QDateTime time;
        QString timeStr = time.currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");


        ui->getTextEdit->setTextColor(QColor("red"));
        ui->getTextEdit->insertPlainText("本机" + localIpStr + ": " + timeStr + "--TCP--\n");
        ui->getTextEdit->setTextColor(QColor("black"));
        ui->getTextEdit->insertPlainText(str +"\n");
        ui->sendTextEdit->clear(); //点击发送后,发送编辑框内清零
        ui->sendTextEdit->setFocus(); //焦点停留在发送编辑框
        autoScroll();
    }
}

       有了UDp的经验,这两个函数还算好些,至少编码解码上不会出问题了。服务器端和接收端的显示发送函数都是一样的。接收函数用的QByteArray data = tcpsocketServer->readAll();发送函数写数据用的 tcpsocketServer->write(data);着和UDP的发送接收还是有区别的。当然了只是发送简单的文本可以这么搞,如果发送大文件,估计没这么简单了。

二、Tcp客户端

     客户端只有一个QTcpSocket *tcpSocket,在构造函数里tcpSocket = new QTcpSocket(this),我们希望按下“连接”按键,客户端发出请求连接。这个按键的槽函数是:

//客户端,按下启动TCP按键的槽函数
void Widget::on_startTcpBtn_clicked()
{
    remoteIpStr = ui->ipEdit->text();
    port = ui->portEdit->text();
    tcpSocket->abort(); //取消原来的连接
    tcpSocket->connectToHost(remoteIpStr, port.toInt());
}

      核心的一句话是tcpSocket->connectToHost(remoteIpStr, port.toInt());注意这里remoteIpStr是个QString类型的变量,您也可以写成tcpSocket->connectToHost(“192.168.2.211”, 6665)这样来测试下是没问题的。也可以写成 remoteHostAddr = new QHostAddress(remoteIpStr); tcpSocket->connectToHost(*remoteHostAddr, port.toInt());这样也是没有问题的!看来qt还是很灵活的。

     另外,在客户端的构造函数里还应该连接四个槽函数:

connect(tcpSocket, SIGNAL(connected()), this,SLOT(tcpIsConnect()));    //已经连接上时的槽函数

connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(tcpFailConnect())); //断开连接时的槽函数

 connect(ui->tcpSendButton, SIGNAL(clicked()), this, SLOT(tcpSendmesg())); //发送消息
    connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(tcpReadmesg()));        //收到消息

发送消息、接收消息的和上面一样,前两个槽函数只是弹出个提示就行啦,如下:

bool Widget::tcpIsConnect()
{
    ui->tcpSendButton->setEnabled(true);
    QMessageBox box;
    box.setText("恭喜您,TCP连接已建立!");
    box.exec();
    return true;
}
void Widget::tcpFailConnect()
{
    ui->tcpSendButton->setEnabled(false);
    QMessageBox box;
    box.setText("TCP连接失败,请重新连接或使用UDP发送!");
    box.exec();
}

      最后,总结下让我一开始云里雾里的基于Qt的TCP协议实现:

      只有两个类用到,QTcpServer和QTcpSocket,服务器端用到一个QTcpServer和一个QTcpSocket;客户端只用一个QTcpSocket。QTcpServer的作用是监听对方的连接,因此开始时要设置监听的端口号或者监听具体的Ip地址。当有客户端连接时,QTcpServer调用 tcpsocketServer = tcpServer->nextPendingConnection();来实例化服务器端的QTcpSocket,然后剩下的发送和接收都由这个QTcpSocket来担当!客户端用到QTcpSocket,让他发送连接请求,当连接成功后又会触发一个函数。

      一句话:数据的发送、读取永远由QTcpSocket来担当!!!QTcpSocket还可以发送连接请求,QTcpServer进行监听,并得到发送请求的QTcpSocket实例。

核心的代码,红色加下划线的部分。

疑惑:服务器端在侦听到连接请求时,如果不想连接客户端,拒绝怎么搞?估计应该再服务器端加个按键,按键槽函数里用QTcpServer的一些方法进行拒绝。继续研究啊还得!




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3