ch33 实验十七 网络编程一Socket通信.docx

上传人:b****5 文档编号:3988820 上传时间:2022-11-26 格式:DOCX 页数:26 大小:19.18KB
下载 相关 举报
ch33 实验十七 网络编程一Socket通信.docx_第1页
第1页 / 共26页
ch33 实验十七 网络编程一Socket通信.docx_第2页
第2页 / 共26页
ch33 实验十七 网络编程一Socket通信.docx_第3页
第3页 / 共26页
ch33 实验十七 网络编程一Socket通信.docx_第4页
第4页 / 共26页
ch33 实验十七 网络编程一Socket通信.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

ch33 实验十七 网络编程一Socket通信.docx

《ch33 实验十七 网络编程一Socket通信.docx》由会员分享,可在线阅读,更多相关《ch33 实验十七 网络编程一Socket通信.docx(26页珍藏版)》请在冰豆网上搜索。

ch33 实验十七 网络编程一Socket通信.docx

ch33实验十七网络编程一Socket通信

实验Scoket编程知识

一.实验目的:

1.掌握JDK的安装和环境变量的配置

2.掌握WTK的安装

3.能够使用JDK和WTK完成基本的实验内容

二.实验内容

javax.microedition.io包中的内容构成了通用连接框架

Socket通信开发流程:

1.服务器监听某个端口

2.客户端连接服务器某个端口

3.通过SocketConnection通信

服务器监听某个端口:

服务器端IP通过ssc的getLocalAddress()获得,例如127.0.0.1

1.通过javax.microedition.io.ServerSocketConnetion接口

2.java.microedition.io.Connector负责建立各种连接

open("socket:

//:

端口"),返回ServerSocketConnection

3.如果有客户端连接上来,可以用ServerSocketConnection.accepteAndOpen()返回SocketConnection

SocketConnection重要方法:

1.getAddress():

2.openDataInputStream/openInputStream:

打开输入流

3.openDataOutputStream/openOutputStream:

打开输出流

案例1:

客户端与服务器端建立连接

●ClientMIDlet1.java文件

importjavax.microedition.io.Connector;

//客户端

publicclassClientMIDlet1extendsMIDlet{

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

protectedvoidpauseApp(){}

protectedvoidstartApp()throwsMIDletStateChangeException{

try{

Connector.open("socket:

//127.0.0.1:

9999");

}catch(Exceptionex){

ex.printStackTrace();

}

}

}

●ServerMIDlet1.java文件

importjavax.microedition.io.Connector;

importjavax.microedition.io.ServerSocketConnection;

//服务器端

publicclassServerMIDlet1extendsMIDlet{

publicServerMIDlet1(){}

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

protectedvoidpauseApp(){}

protectedvoidstartApp()throwsMIDletStateChangeException{

try{

//监听某个端口

ServerSocketConnectionssc

=(ServerSocketConnection)Connector.open("socket:

//:

9999");

//等待客户端连接,如果没有客户端连接,程序在这里阻塞

System.out.println(ssc.getLocalAddress());//获取IP地址

System.out.println(ssc.getLocalPort());//获取端口号

ssc.acceptAndOpen();

}catch(Exceptionex){ex.printStackTrace();

}

}

}

案例2:

客户端与服务器端建立连接.

客户端向服务器端发送“Hello”,服务器端向客户端发送“Welcometojoinus”

●ClientMIDlet2.java文件

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjavax.microedition.io.Connector;

importjavax.microedition.io.SocketConnection;

importjavax.microedition.midlet.MIDlet;

importjavax.microedition.midlet.MIDletStateChangeException;

//客户端

publicclassClientMIDlet2extendsMIDlet{

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

protectedvoidpauseApp(){}

protectedvoidstartApp()throwsMIDletStateChangeException{

try{

//连接到服务器端,连接成功,返回的SocketConnection充当通信桥梁

SocketConnectionsc

=(SocketConnection)Connector.open("socket:

//127.0.0.1:

9999");

/*以后就可以通过sc与服务端通信*/

DataOutputStreamdos=sc.openDataOutputStream();

//输出信息

dos.writeUTF("Hello");

DataInputStreamdis=sc.openDataInputStream();

Stringmsg=dis.readUTF();

System.out.println(msg);

}catch(Exceptionex){

ex.printStackTrace();

}

}

}

●ServerMIDlet2.java文件

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjavax.microedition.io.Connector;

importjavax.microedition.io.ServerSocketConnection;

importjavax.microedition.io.SocketConnection;

importjavax.microedition.midlet.MIDlet;

importjavax.microedition.midlet.MIDletStateChangeException;

//服务器端

publicclassServerMIDlet2extendsMIDlet{

publicServerMIDlet2(){}

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

protectedvoidpauseApp(){}

protectedvoidstartApp()throwsMIDletStateChangeException{

try{

//监听某个端口

ServerSocketConnectionssc

=(ServerSocketConnection)Connector.open("socket:

//:

9999");

//等待客户端连接,如果有客户端链接,acceptAndOpen方法返回的StreamConnection强制转换为SocketConnection充当通信桥梁

SocketConnectionsc=(SocketConnection)ssc.acceptAndOpen();

/*以后就可以通过sc与客户端通信*/

System.out.println("客户端:

"+sc.getAddress());

DataInputStreamdis=sc.openDataInputStream();

Stringmsg=dis.readUTF();

System.out.println(msg);

DataOutputStreamdos=sc.openDataOutputStream();

//输出信息

dos.writeUTF("Welcometojoinus");

}catch(Exceptionex){

ex.printStackTrace();

}

}

}

案例3:

简单聊天室程序(未经过优化,会抛出异常)

●ChatClientMIDlet.java文件//优化之前文件

publicclassChatClientMIDletextendsMIDletimplementsCommandListener{

privateSocketConnectionsc=null;

//*********①

privateCommandcmdSend=newCommand("发送",Command.SCREEN,1);

privateFormfrmChat=newForm("聊天界面");

privateTextFieldtfMsg=newTextField("输入聊天信息","",255,TextField.ANY);

privateDisplaydisplay;

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

protectedvoidpauseApp(){}

protectedvoidstartApp()throwsMIDletStateChangeException{

display=Display.getDisplay(this);

display.setCurrent(frmChat);

frmChat.addCommand(cmdSend);

frmChat.append(tfMsg);

frmChat.setCommandListener(this);

try{

sc=(SocketConnection)Connector.open("socket:

//127.0.0.1:

9999");

//*********②

newReceiveThread().start();

}catch(Exceptionex){

ex.printStackTrace();

}

}

publicvoidcommandAction(Commandc,Displayabled){

if(c==cmdSend){

try{

DataOutputStreamdos=sc.openDataOutputStream();//*********③

dos.writeUTF(tfMsg.getString());

}catch(Exceptionex){

//ex.printStackTrace();

}

}

}

classReceiveThreadextendsThread{

publicvoidrun(){

while(true){

try{

DataInputStreamdis=sc.openDataInputStream();//*********④

Stringmsg=dis.readUTF();

frmChat.append(msg+"\n");

}catch(Exceptionex){

ex.printStackTrace();

}

}

}

}

}

●ChatServerMIDlet.java文件//优化之前文件

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjavax.microedition.io.Connector;

importjavax.microedition.io.ServerSocketConnection;

importjavax.microedition.io.SocketConnection;

importjavax.microedition.lcdui.Command;

importjavax.microedition.lcdui.CommandListener;

importjavax.microedition.lcdui.Display;

importjavax.microedition.lcdui.Displayable;

importjavax.microedition.lcdui.Form;

importjavax.microedition.lcdui.TextField;

importjavax.microedition.midlet.MIDlet;

importjavax.microedition.midlet.MIDletStateChangeException;

publicclassChatServerMIDletextendsMIDletimplementsCommandListener{

privateServerSocketConnectionssc=null;

privateSocketConnectionsc=null;

//*********⑤

privateCommandcmdSend=newCommand("发送",Command.SCREEN,1);

privateFormfrmChat=newForm("聊天界面");

privateTextFieldtfMsg=newTextField("输入聊天信息","",255,TextField.ANY);

privateDisplaydisplay;

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

protectedvoidpauseApp(){}

protectedvoidstartApp()throwsMIDletStateChangeException{

display=Display.getDisplay(this);

display.setCurrent(frmChat);

frmChat.addCommand(cmdSend);

frmChat.append(tfMsg);

frmChat.setCommandListener(this);

try{

ssc=(ServerSocketConnection)Connector.open("socket:

//:

9999");

sc=(SocketConnection)ssc.acceptAndOpen();

//*********⑥

newReceiveThread().start();

}catch(Exceptionex){

ex.printStackTrace();

}

}

publicvoidcommandAction(Commandc,Displayabled){

if(c==cmdSend){

try{

DataOutputStreamdos=sc.openDataOutputStream();//*********⑦

dos.writeUTF(tfMsg.getString());

}catch(Exceptionex){

//ex.printStackTrace();

}

}

}

classReceiveThreadextendsThread{

publicvoidrun(){

while(true){

try{

DataInputStreamdis=sc.openDataInputStream();//*********⑧

Stringmsg=dis.readUTF();

frmChat.append(msg+"\n");

}catch(Exceptionex){

ex.printStackTrace();

}

}

}

}

}

优化方式:

删除③④⑦⑧处代码

在①⑤处添加代码:

privateDataInputStreamdis=null;privateDataOutputStreamdos=null;

在②⑥处添加代码:

dis=sc.openDataInputStream();dos=sc.openDataOutputStream();

聊天室程序

1.ChatServerMIDlet

importjava.io.*;

importjavax.microedition.io.*;

importjavax.microedition.lcdui.*;

importjavax.microedition.midlet.*;

publicclassChatServerMIDletextendsMIDletimplementsCommandListener{

privateServerSocketConnectionssc=null;

privateSocketConnectionsc=null;

privateDataInputStreamdis=null;

privateDataOutputStreamdos=null;

privatebooleanrun=true;

privateTextFieldtfMsg=newTextField("输入聊天信息","",255,TextField.ANY);

privateCommandcmdSend=newCommand("发送",Command.SCREEN,1);

privateFormfrmChat=newForm("聊天界面");

privateDisplaydisplay;

protectedvoidstartApp()throwsMIDletStateChangeException{

display=Display.getDisplay(this);

display.setCurrent(frmChat);

frmChat.addCommand(cmdSend);

frmChat.append(tfMsg);

frmChat.setCommandListener(this);

try{

ssc=(ServerSocketConnection)Connector.open("socket:

//:

9999");

sc=(SocketConnection)ssc.acceptAndOpen();

dis=sc.openDataInputStream();

dos=sc.openDataOutputStream();

newReceiveThread().start();

}catch(Exceptionex){

ex.printStackTrace();

}

}

publicvoidcommandAction(Commandc,Displayabled){

if(c==cmdSend){

try{

dos.writeUTF(tfMsg.getString());

}catch(Exceptionex){}

}

}

classReceiveThreadextendsThread{

publicvoidrun(){

while(run){

try{

Stringmsg=dis.readUTF();

frmChat.append(msg+"\n");

}catch(Exceptionex){ex.printStackTrace();}

}

close();

}

}

publicvoidclose(){

try{

dos.close();

dis.close();

sc.close();

ssc.close();

}catch(Exceptionex){}

}

}

ChatClientMIDlet

…………

importexample1.ChatServerMIDlet.ReceiveThread;

publicclassChatClientMIDletextendsMIDletimplementsCommandListener{

privateSocketConnectionsc=null;

privateDataInputStreamdis=null;

privateDataOutputStreamdos=null;

privateTextFieldtfMsg=newTextField("输入聊天信息","",255,TextField.ANY);

privateCommandcmdSend=newCommand("发送",Command.SCREEN,1);

privateFormfrmChat=newForm("聊天界面");

privateDisplaydisplay;

protecte

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1