`

Symbian中同步socket用法

阅读更多

 

//下边的代码是介绍同步socket的用法:

//需要用到的lib,可能不全,请看sdk的help自己添加

esock.lib

//需要的头文件,可能不全,请看sdk的help自己添加

#include <in_sock.h>

#include <nifman.h>

#include <Es_sock.h>

 

#if defined __WINS__

_LIT(KConnectIP,"192.168.0.1");//连接的ip地址,换成测试的ip

#else

_LIT(KConnectIP,"10.0.0.172");//移动的cmwap代理网关

#endif

const int KConnectPort = 80;//端口

HBufC8 *SocketGetUrl(TDesC8 &geturl);

void TestSocket()

{

    _LIT8(KSendData, "POST http:://www.google.com.cn http/1.1\r\n\r\n");

    TBuf8<128> sendData(KSendData);

    HBufC8 *body = SocketGetUrl(sendData);

    if(body)

    {

        //服务器端返回的数据处理

        delete body;

    }

}

HBufC8 *SocketGetUrl(TDesC8 &geturl)

{

    RNif iNif;

    RSocket iSocket;

    TRequestStatus iStatus = KRequestPending;

    TBuf8<512> writeBuf(geturl);

    TBuf8<64> recvBuf;

    HBufC8 *iBuffer = NULL;

   

    iNif.Open();

    {

        RSocketServ iSocketServ;

        User::LeaveIfError(iSocketServ.Connect());

        TInetAddr iAddress;

        if (iAddress.Input(KConnectIP) == KErrNone)

        {

            User::LeaveIfError(iSocket.Open(iSocketServ, KAfInet, KSockStream, KProtocolInetTcp));

            iAddress.SetPort(KConnectPort);

           

            iStatus = KRequestPending;

            iSocket.Connect(iAddress, iStatus);

            User::WaitForRequest(iStatus);

            if (iStatus.Int() ==KErrNone)

            {

                iStatus = KRequestPending;

                iSocket.Write(writeBuf,iStatus);

                User::WaitForRequest(iStatus);

                if (iStatus.Int() ==KErrNone)

                {

                    TSockXfrLength iDummyLength;

                    TInt recvSize = 0;

                   

                    for(;;)

                    {

                        iStatus = KRequestPending;

                        iSocket.RecvOneOrMore(recvBuf, 0, iStatus, iDummyLength);

                        User::WaitForRequest(iStatus);

                       

                        if (iStatus.Int()==KErrNone)

                        {

                            recvSize += recvBuf.Length();

                            if(iBuffer==NULL)

                                iBuffer = HBufC8::NewL(recvSize);

                            else

                                iBuffer = iBuffer->ReAlloc(recvSize);

                            iBuffer->Des().Append(recvBuf);

                        }

                        else

                        {

                            break;

                        }

                    }

                }

            }

            iSocket.Close();

        }

       

        iSocketServ.Close();

    }

    iNif.Close();

    return iBuffer;

}

此段代码只是对socket用法的简单介绍,没有超时处理,如果要做超时处理的话,请自己添加。

 

分享到:
评论

相关推荐

    Symbian OS端到端socket编程案例

    需要注意的是,Symbian OS中的Socket操作是阻塞的,因此需要正确处理同步和异步通信。 6. **关闭Socket**:通信结束后,应调用`Close()`函数关闭Socket,释放资源。 在"End-to-End_Sockets_API_Example"这个压缩包...

    Symbian+网络编程之使用Socket+API.rar

    《Symbian操作系统中的网络编程:借助Socket API实现通信详解》 Symbian操作系统作为曾经在智能手机领域广泛应用的系统,其强大的功能和灵活性使得开发者能够进行深入的网络编程。本资料集围绕“Symbian+网络编程之...

    《Symbian S60 (第3版) 手机程序开发与实用教程》

    Symbian操作系统支持多线程编程,开发者需要掌握如何创建和管理线程,以及如何在它们之间同步和通信。 4. **数据传输**:在蓝牙连接建立后,通常会使用RSocket类来实现数据的发送和接收。开发者需要了解如何打开和...

    SYMBIAN OS C++手机应用开发 第2卷_0.rar

    4. **线程和同步**:Symbian OS中的多线程编程是其特色之一,学习如何创建和管理线程,以及使用信号量、互斥锁等同步机制来保证数据安全。 5. **UI设计与控件**:讲解如何使用Symbian的用户界面(UI)库创建图形...

    Symbian s60 http客户端源码例子

    在IT行业中,Symbian操作系统曾经是智能手机领域的主流平台,特别是在功能机时代。S60是Symbian OS上的一个用户界面框架,广泛应用于诺基亚等品牌的手机。本篇文章将详细探讨“Symbian s60 http客户端源码例子”这一...

    Symbian 活动对象.doc

    在Symbian系统中,活动对象(Active Object)和活动调度器(Active Scheduler)是实现非抢先式多任务的关键组件,尤其在单线程环境中,它们提供了高效、简洁的编程模型。 1. **活动对象**(Active Object) - 活动...

    sipengine.rar_mobile sip_symbian_visual c

    在" sipengine.rar_mobile sip_symbian_visual c "这个项目中,我们可以推测这是一套使用C++语言在Symbian平台上实现的SIP引擎,专为Visual C++开发环境设计,便于Windows上的编译和调试。 在C++中实现SIP引擎涉及...

    新版Android开发教程.rar

    与谷歌日历同步;与 Android Market 联机;支持谷歌 “ 街景 ” 服务;包装盒内附 数据工具包。 更多信息 https://sites.google.com/a/android.com/opensource/release-features Android Android Android Android ...

Global site tag (gtag.js) - Google Analytics