J2MESocket超时处理
  vvb6bOG0D5hl 2023年11月02日 104 0


在开发J2ME的时候需要用到Socket 所以研究了下超时的处理

 

在J2ME中基于UDP协议编程一文中介绍了如何使用Datagram和DatagramConnection来开发应用程序,本文将主要讲述在 MIDP2.0中使用ServerSocketConnection和SocketConnection来开发联网应用程序。TCP协议是可以保证传输的 质量的,这也是他和UDP的一大区别。由于以上谈到的四个类都属于GCF,他们在程序编写方面也非常相似,通常我们在Server端的某个端口监听,当客 户端连接服务器的时候,则可以得到一个SocketConnection的实例。通过两端的SocketConnection则可以实现C/S结构的通信 了。

首先看一下,ServerSocketConnection类,它的一个非常重要的方法就是acceptAndOpen()方法,这个方法返回一个SocketConnection实例,从而使得客户端和服务器端可以通过socket通信了。典型的代码如下:

// Create the server listening socket for port 1234 

 ServerSocketConnection scn = (ServerSocketConnection)

 Connector.open("socket://:1234");// Wait for a connection.

 SocketConnection sc = (SocketConnection) scn.acceptAndOpen();// Set application specific hints on the socket.

 sc.setSocketOption(DELAY, 0);

 sc.setSocketOption(LINGER, 0);

 sc.setSocketOption(KEEPALIVE, 0);

 sc.setSocketOption(RCVBUF, 128);

 sc.setSocketOption(SNDBUF, 128);// Get the input stream of the connection.

 DataInputStream is = sc.openDataInputStream();// Get the output stream of the connection.

 DataOutputStream os = sc.openDataOutputStream();// Read the input data.

 String result = is.readUTF();// Echo the data back to the sender.

 os.writeUTF(result);// Close everything.

 is.close();

 os.close();

 sc.close();

 scn.close();

 ..

SocketConnection的使用也是非常简单,通过Connector的open方法我们可以得到一个SocketConnection的实例。

SocketConnection sc = (SocketConnection)

 Connector.open("socket://host.com:79");

 sc.setSocketOption(SocketConnection.LINGER, 5); InputStream is = sc.openInputStream();

 OutputStream os = sc.openOutputStream();os.write("/r/n".getBytes());

 int ch = 0;

 while(ch != -1) {

  ch = is.read();

 }is.close();

 os.close();

 sc.close();

其实我们在用socket编写程序的时候无非遵循这样的一种规则:服务器端建立监听端口等待连接,客户端通过open()方法与服务器端建立连接,两端通过建立的socket传输数据,关闭连接。

下图是我在运行WTK中NetworkDemo的时候的截图!代码也一并发表出来。


在 J2ME中基于UDP协议编程一文中介绍了如何使用Datagram和DatagramConnection来开发应用程序,本文将主要讲述在 MIDP2.0中使用ServerSocketConnection和SocketConnection来开发联网应用程序。TCP协议是可以保证传输的 质量的,这也是他和UDP的一大区别。由于以上谈到的四个类都属于GCF,他们在程序编写方面也非常相似,通常我们在Server端的某个端口监听,当客 户端连接服务器的时候,则可以得到一个SocketConnection的实例。通过两端的SocketConnection则可以实现C/S结构的通信 了。

首先看一下,ServerSocketConnection类,它的一个非常重要的方法就是acceptAndOpen()方法,这个方法返回一个SocketConnection实例,从而使得客户端和服务器端可以通过socket通信了。典型的代码如下:

// Create the server listening socket for port 1234 

 ServerSocketConnection scn = (ServerSocketConnection)

 Connector.open("socket://:1234");// Wait for a connection.

 SocketConnection sc = (SocketConnection) scn.acceptAndOpen();// Set application specific hints on the socket.

 sc.setSocketOption(DELAY, 0);

 sc.setSocketOption(LINGER, 0);

 sc.setSocketOption(KEEPALIVE, 0);

 sc.setSocketOption(RCVBUF, 128);

 sc.setSocketOption(SNDBUF, 128);// Get the input stream of the connection.

 DataInputStream is = sc.openDataInputStream();// Get the output stream of the connection.

 DataOutputStream os = sc.openDataOutputStream();// Read the input data.

 String result = is.readUTF();// Echo the data back to the sender.

 os.writeUTF(result);// Close everything.

 is.close();

 os.close();

 sc.close();

 scn.close();

 ..

SocketConnection的使用也是非常简单,通过Connector的open方法我们可以得到一个SocketConnection的实例。

SocketConnection sc = (SocketConnection)

 Connector.open("socket://host.com:79");

 sc.setSocketOption(SocketConnection.LINGER, 5); InputStream is = sc.openInputStream();

 OutputStream os = sc.openOutputStream();os.write("/r/n".getBytes());

 int ch = 0;

 while(ch != -1) {

  ch = is.read();

 }is.close();

 os.close();

 sc.close();

其实我们在用socket编写程序的时候无非遵循这样的一种规则:服务器端建立监听端口等待连接,客户端通过open()方法与服务器端建立连接,两端通过建立的socket传输数据,关闭连接。

 

 

设置超时的时间


sc.setSocketOption(SocketConnection.LINGER, 5);


 

  • setSocketOption(<属性名>, int);
    <属性名>:
  • SocketConnection.DELAY:开启Nagle算法?(0/1)
  • SocketConnection.LINGER:服务器悬挂等待时间
  • SocketConnection.KEEPALIVE:
  • SocketConnection.RCVBUF:接收缓冲
  • SocketConnection.SNDBUF:发送缓冲
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
vvb6bOG0D5hl