使用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();
}
}
}
相关推荐
NULL 博文链接:https://516100981.iteye.com/blog/2314314
由线程池技术改编的socket连接池,当中包括了通过windows计数器,统计线程池性能信息。
NULL 博文链接:https://smallbee.iteye.com/blog/1698708
易语言socket连接超时源码例程.zip易语言项目例子源码下载易语言socket连接超时源码例程.zip易语言项目例子源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.适合小团队开发项目参考
如果服务端没有新数据,但是客户端get请求到的数据都是旧数据,这样不仅浪费了带宽资源,而且占用CPU内存。 LongPolling是在Polling上的一些改进,在一定程度解决了带宽资源和CPU内存浪费情况,但是当服务端数据更新...
netty的简介,netty是一种socket技术,实现长连接,此技术更加成熟
课设内容,没有用到数据库
深入解析TCP、HTTP、Socket、Socket连接池.rar
在wince平台下设计使用SOKET技术实现连接FTP,并登录,同时实现了上传下载文件,并作速度和流量的统计!
数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 Socket为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:int socket(int domain, int type, ...
netty的简介,netty是一种socket技术,实现长连接,此技术更加成熟1
这是Andoid的平台使用Ndk技术,开发的有连接的Socket通信小例子。
【程序老媛出品,必属精品,亲测校正,...资源名:C#与三菱PLC 进行socket通信 程序源码 资源类型:程序源代码 源码说明: C#与三菱FX5U socket通信,内有C#程序 三菱FX5U程序 适合人群:新手及有一定经验的开发人员
Socket通信技术。利用到了Thread技术,完成了,服务器开启,一直监听客户端功能,两点是,当服务器端断开后重新打开后,客户端能自动链接到服务器端,由于网络原因最多延迟2分钟
一 、实验目的 1. 了解socket类的网络编程技术; 2. 熟悉socket客户端与服务器端通信的结构和工作原理;...一旦这两个Socket连接起来,它们就可以进行双向数据传输,双发都可以进行发送和接收操作.
netty的简介,netty是一种socket技术,实现长连接,此技术更加成熟
资源名:三菱Q系列PLC TCP socket通讯实例程序加技术文档 资源类型:程序源代码 源码介绍:PLC 为三菱Q06H和QJ71E71-100模块; Socket 测试软件; 参考手册:Q 系列以太网接口模块用户手册基础篇 适合人群:新手及...
1. 建立Socket连接,监听客户端请求。 2. 解析HTTP请求报文,获取目标Web服务器的地址和端口号。 3. 建立Socket连接,向Web服务器发送HTTP请求。 4. 接收Web服务器的响应报文,解析并封装为HTTP响应报文。 5. 将HTTP...
socket.io,socket.io-client 用于java或android连接nodejs websocket