`
rayloo
  • 浏览: 87427 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Socket连接技术

阅读更多

使用Socket 是连接两台计算机最简单的方法,另外由于Socket 使用的是TCP 协议,所以
也就保证了传输的质量。但在这里要注意的是,并不是所有的MIDP 设备都支持Socket 网络。
在这部分中我们主要涉及到的两个接口是SocketConnection 和ServerSocketConnection。这
个两个接口的使用方法其实和J2SE 中的Socket 和ServerSocket 类的使用方法很相似。不同的是
ServerSocketConnection 中打开一个SocketConnection 作为监听者的方法是acceptAndOpen()。同
时你可以用getLocalAddress()和getLocalPort()两个方法获得本地的绑定IP 地址和所打开的端口
号,这样你就可以告诉另外一台MIDP 设备你所使用的IP 和端口,使得另一台MIDP 设备可以
连接到你的设备上。
在这里我们除了强调使用acceptAndOpen()从一个ServerSocketConnection 对象中打开一个
SocketConnection 作为监听者外,还要说明的是作为套接字我们是可以设置一些属性的,这些属
性的设置是通过SocketConnection.setSocketOption()方法来设置

packagesocketText;

importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;

importjavax.microedition.io.Connector;
importjavax.microedition.io.ServerSocketConnection;
importjavax.microedition.io.SocketConnection;
importjavax.microedition.lcdui.Alert;
importjavax.microedition.lcdui.AlertType;
importjavax.microedition.lcdui.Command;
importjavax.microedition.lcdui.CommandListener;
importjavax.microedition.lcdui.Display;
importjavax.microedition.lcdui.Displayable;
importjavax.microedition.lcdui.Form;
importjavax.microedition.lcdui.StringItem;
importjavax.microedition.lcdui.TextField;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;

/***//**
*
*
@authorleilu服务器端代码
*/

publicclassSocketServerextendsMIDletimplementsCommandListener,Runnable
...{
privateDisplaydisplay;

privateFormf;

privateStringItemsi;

privateTextFieldtf;

privatebooleanstop;

//创建Command对象
privateCommandsendCommand=newCommand("send",Command.ITEM,1);

privateCommandexitCommand=newCommand("Exit",Command.EXIT,1);

//输入流
InputStreamis;

//输出流
OutputStreamos;

//Socket连接
SocketConnectionsc;

//Socket服务器连接
ServerSocketConnectionscn;

publicSocketServer()
...{
display
=Display.getDisplay(this);
f
=newForm("SocketServer");
si
=newStringItem("Status:","");
//显示发送消息的控件
tf=newTextField("Send:","",30,TextField.ANY);
f.append(si);
f.append(tf);
f.addCommand(exitCommand);
//f.addCommand(sendCommand);
f.setCommandListener(this);
display.setCurrent(f);
//启动线程
Threadt=newThread(this);
t.start();

}


protectedvoidstartApp()throwsMIDletStateChangeException
...{
//TODOAuto-generatedmethodstub

}


protectedvoidpauseApp()
...{
//TODOAuto-generatedmethodstub

}


protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException
...{
//TODOAuto-generatedmethodstub

}


publicvoidcommandAction(Commandc,Displayabled)
...{
if(sendCommand==c)
...{
try
...{
os.write(tf.getString().getBytes());
os.write(
" ".getBytes());
}

catch(IOExceptione)
...{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}

elseif(exitCommand==c)
...{
try
...{
destroyApp(
false);
this.notifyDestroyed();
}

catch(MIDletStateChangeExceptione)
...{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}


}


publicvoidrun()
...{
si.setText(
"Waitingforconnection");
//创建一个服务器的ServerSocketConnection连接

try
...{
scn
=(ServerSocketConnection)Connector.open("socket://:5000");
//等待一个连接
sc=(SocketConnection)scn.acceptAndOpen();
//设置提示信息
si.setText("Connectionaccepted");
is
=sc.openInputStream();
os
=sc.openOutputStream();
//连接完成后允许发送
f.addCommand(sendCommand);
//读取客户端发来的消息

while(true)
...{
StringBuffersb
=newStringBuffer();
intc=0;
//读取数据
while(((c=is.read())!=' ')&&(c!=-1))
...{
sb.append((
char)c);
}

//如果读取数据失败
if(c==-1)
...{
break;
}

//显示客户端反发送过来的消息
si.setText("Messagereceved-"+sb.toString());
}

si.setText(
"Connectionisclosed");
//连接结束,则不实现发送按钮
f.removeCommand(sendCommand);

}

catch(IOExceptionioe)
...{
if(ioe.getMessage().equals("ServerSocketOpen"))
...{
//提示端口己经被占用
Alerta=newAlert("Server","Port5000isalreadytaken.",
null,AlertType.ERROR);
a.setTimeout(Alert.FOREVER);
a.setCommandListener(
this);
display.setCurrent(a);
}

else
...{
if(!stop)
...{
ioe.printStackTrace();
}

}

}

catch(Exceptione)
...{
e.printStackTrace();
}


}


//释放资源
publicvoidstop()
...{
try
...{
stop
=true;
if(is!=null)
...{
is.close();
}

if(os!=null)
...{
os.close();
}

if(sc!=null)
...{
sc.close();
}

if(scn!=null)
...{
scn.close();
}

}

catch(IOExceptione)
...{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}


}

packagesocketText;

importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;

importjavax.microedition.io.ConnectionNotFoundException;
importjavax.microedition.io.Connector;
importjavax.microedition.io.SocketConnection;
importjavax.microedition.lcdui.Alert;
importjavax.microedition.lcdui.AlertType;
importjavax.microedition.lcdui.Command;
importjavax.microedition.lcdui.CommandListener;
importjavax.microedition.lcdui.Display;
importjavax.microedition.lcdui.Displayable;
importjavax.microedition.lcdui.Form;
importjavax.microedition.lcdui.StringItem;
importjavax.microedition.lcdui.TextField;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;

publicclassSocketClientextendscolor: #00
分享到:
评论

相关推荐

    java socket连接池 实现

    在高并发的网络环境中,频繁地创建和销毁Socket连接会导致大量的系统资源浪费,影响整体性能。为了解决这个问题,开发人员通常会使用连接池来管理和复用已建立的Socket连接。 首先,我们来看一下Socket的基本概念。...

    C# Socket连接池

    本文将深入探讨“C# Socket连接池”的实现原理、优势以及如何利用线程池技术来构建和优化它。同时,我们也会提及Windows计数器在监控和分析线程池性能中的作用。 首先,理解Socket连接池的概念。Socket是网络通信的...

    Socket连接控制打印机输出

    通过学习和理解这个文件,开发者可以更好地掌握Socket连接打印机的技术细节,并应用于实际项目中。 总之,Socket连接控制打印机输出是一种基于网络的远程打印解决方案,通过IP地址和特定端口与打印机建立连接,发送...

    java socket连接池

    Java Socket连接池是一种优化网络通信性能的技术,它允许应用程序复用已经建立的Socket连接,从而减少因频繁创建和销毁Socket连接而产生的开销。在高并发的服务器环境中,Socket连接池能够有效地提升系统效率和响应...

    socket 客户端连接池实现

    它允许应用程序预先创建并维护一组可重用的Socket连接,从而避免了每次通信时建立新连接的开销。本文将深入探讨Socket客户端连接池的实现原理、优势以及如何在实际应用中进行配置和管理。 首先,我们要理解Socket的...

    Java实现Socket长连接和短连接

    Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short Connection)** 短连接通常用于一次性、非持久性的通信,如HTTP协议就是典型的短连接。在短连接中...

    Socket连接池的简单应用

    为此,本文档介绍了一种解决这些问题的方法——Socket连接池技术,并通过具体实例来展示如何在客户端和服务端之间实现这一技术。 #### 二、Socket连接的基础概念 在深入探讨Socket连接池之前,我们需要了解两种...

    一个Socket连接管理器

    1. **连接池**:为了提高性能,管理器通常会使用连接池技术,预先创建并保持一定数量的Socket连接,避免每次客户端请求时都需要新建连接的开销。 2. **并发处理**:管理器需要能同时处理多个客户端的连接请求,这...

    iOS下的Socket连接demo

    本文将详细解析"iOS下的Socket连接demo",并介绍相关的知识点。 首先,Socket通常被称为套接字,是应用层与传输层之间的一个抽象接口,允许应用程序通过网络发送和接收数据。它提供了进程间通信(IPC)的能力,使得...

    socket线程连接池实例

    通过这种方式,我们可以有效地管理和复用Socket连接,降低系统的资源消耗,提高系统的吞吐量。在大型分布式系统中,这样的设计是必不可少的,它能够帮助系统更好地应对高并发访问和网络延迟等问题。 总的来说,这个...

    socket短连接和长连接 多线程的应用

    "短连接"和"长连接"是Socket连接的两种不同模式,它们在处理网络请求时有着显著的区别。 短连接(Short Connection)通常用于一次性或者较少交互的服务,如HTTP协议就是基于短连接的。在短连接中,每次通信完成后,...

    pb编写的socket连接

    以上就是关于"pb编写的socket连接"的核心内容,这种技术结合了Socket通信的可靠性与Protocol Buffers的高效性,广泛应用于分布式系统、物联网、游戏服务器等领域。在实际项目中,开发者需要根据具体需求选择合适的...

    C# socket异步长连接

    在C#中,System.Net.Sockets命名空间提供了Socket类,用于创建和管理socket连接。 在“异步”方面,C#的Socket支持异步操作模式,这意味着你可以启动一个网络操作(如连接、接收或发送数据),然后继续执行其他任务...

    c# Socket长连接 短链接 自己封装 通讯

    虽然标题中没有直接提及WebSocket,但作为标签,可能意味着讨论的长连接与WebSocket技术有关。 6. **SocketCommunicationDll**:这是一个可能的库文件名,表明作者可能已经封装了一个DLL动态链接库,包含自定义的...

    c#socket连接服务器

    本主题将深入探讨“C# Socket连接服务器”的相关知识,包括如何建立连接、发送和接收数据,以及如何检测客户端的在线状态。 首先,Socket在计算机网络中是一种基于TCP/IP协议的通信方式,它允许两台或多台计算机...

    fx5以太网socket连接 测试ok.zip

    "fx5以太网socket连接 测试ok.zip"这个文件名暗示了一个使用FX5系列PLC(可编程逻辑控制器)进行以太网Socket通信的测试项目。FX5是三菱电机推出的一款高端PLC,具备强大的网络通讯功能,适用于自动化控制系统的集成...

    android中网口打印机的Socket连接和打印测试数据

    在Android开发中,实现“网口打印机的Socket连接和打印测试数据”涉及到多个技术点,主要涵盖网络通信、设备交互和错误处理等方面。以下是对这些知识点的详细解释: 1. **Socket通信**: - Socket是网络编程的基础...

    Socket长连接+心跳包+发送读取

    Socket长连接是网络编程中的重要概念,主要用于保持客户端与服务器之间的持续通信状态,避免每次通信都需要重新建立连接的开销。...通过对这些代码的阅读和理解,可以深入掌握Socket编程的核心技术。

    BIO Socket连接池

    通过阅读`PoolConnectionHandler.java`、`SocketServerPool.java`和`SocketClient.java`的代码,我们可以深入了解BIO Socket连接池的实现细节,包括线程安全、连接分配策略、连接状态检测等技术。同时,这也为我们...

    socket连接池加消息队列源码

    Socket连接池和消息队列是两种在分布式系统和网络编程中常见的技术,它们在提高系统性能、优化资源管理和实现异步通信方面起着至关重要的作用。在这个“socket连接池加消息队列源码”中,我们可以看到作者创建了一个...

Global site tag (gtag.js) - Google Analytics