symbian rsocket 的一个例子

来源:互联网 发布:wd移动硬盘格式化mac 编辑:程序博客网 时间:2024/05/29 16:38

现在网上已经有一些关于本例所用到的API的详细说明,所以在此就不加详细说明,本文会注重讲解用API时的一些注意事项,本例以symbian手机为客户端,以PC为服务端,服务端使用JAVA写的。

客户端代码如下:

    RSocketServ ser;

RHostResolver Host;

RSocket socket;

TUint NumPro;

TSockAddr Addr;

TProtocolDesc ProInfo;

TRequestStatus Status;

TNameEntry Info;

User::LeaveIfError(ser.Connect())

User::LeaveIfError(ser.NumProtocols(NumPro));

TBuf8<KSocketDefaultBufferSize> test;

TSockXfrLength iLen = KSocketDefaultBufferSize;

    Host.Open(ser, KAfInet, KProtocolInetTcp);

User::LeaveIfError(Host.GetByName(_L("jinxuxin-PC"), Info));

User::LeaveIfError(socket.Open(ser, KAfInet, KSockStream,         KProtocolInetTcp));

Addr = Info().iAddr;

Addr.SetPort(20001);

socket.Connect(Addr, Status);

User::WaitForRequest(Status);

console->Printf(_L("connected...."));

socket.RecvOneOrMore(test, 0, Status, iLen);

User::WaitForRequest(Status);

console->(CnvUtfConverter::ConvertToUnicodeFromUtf8L(test)->Des());

RHostResolver Host:定义名字解析,因为我在帮助文档里没找到直接设置IP的方法(如果那位大侠知道如何直接设置IP的方法,希望不吝赐教),就只能用名字来取得IP地址,获得TSockAddr 对象:首先通过GenByName可以获得TNameEntry 对象(如果给入的主机名不存在的话,会出现system error -1的错误)通过Info().iAddrTNameEntry 重载了括号操作符,返回一个TSockAddr 对象)可获得TSockAddr 对象。再调用Addr.SetPort(20001)设置端口。

两个User::WaitForRequest(Status)的作用:等待操作成功。

TSockXfrLength iLen = KSocketDefaultBufferSizeTSockXfrLength 重载了=号操作符,可以用一个整数去初始化TSockXfrLength 对象。

console->(CnvUtfConverter::ConvertToUnicodeFromUtf8L(test)->Des()):网络上传输的数据都是以UTF-8进行编码的,为了中文现实不会出现乱码,将UTF-8转换为Unicode以后进行打印。

服务器端代码:

private static final int BUFSIZE = 32;   // Size of receive buffer

  public static void main(String[] args) throws IOException {

    int servPort = 20001;

       ServerSocket servSock = new ServerSocket(servPort);

    int recvMsgSize;   // Size of received message

    byte[] receiveBuf = new byte[BUFSIZE];  // Receive buffer

    while (true) { // Run forever, accepting and servicing connections

      Socket clntSock = servSock.accept();     // Get client connection

      SocketAddress clientAddress = clntSock.getRemoteSocketAddress();

      System.out.println("Handling client at " + clientAddress);

      

      InputStream in = clntSock.getInputStream();

      OutputStream out = clntSock.getOutputStream();

      

      out.write(new String("Hello").getBytes());

   

      clntSock.close();       

}

   本服务器接收到连接后在控制台打印出客户端的IP地址,然后传回一个Hello字符串,检测连接是否通畅。

原创粉丝点击