ch33 实验十七 网络编程(一)Socket通信.doc_第1页
ch33 实验十七 网络编程(一)Socket通信.doc_第2页
ch33 实验十七 网络编程(一)Socket通信.doc_第3页
ch33 实验十七 网络编程(一)Socket通信.doc_第4页
ch33 实验十七 网络编程(一)Socket通信.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

J2ME程序设计之网络编程(一)Socket通信实验 Scoket编程知识一实验目的:1 掌握JDK的安装和环境变量的配置2 掌握WTK的安装3 能够使用JDK和WTK完成基本的实验内容二实验内容javax.microedition.io包中的内容构成了通用连接框架Socket通信开发流程:1.服务器监听某个端口2.客户端连接服务器某个端口3.通过SocketConnection通信服务器监听某个端口:服务器端IP通过ssc的getLocalAddress()获得,例如1.通过javax.microedition.io.ServerSocketConnetion接口2.java.microedition.io.Connector负责建立各种连接open(socket:/:端口),返回ServerSocketConnection3.如果有客户端连接上来,可以用ServerSocketConnection.accepteAndOpen()返回SocketConnectionSocketConnection重要方法:1.getAddress():2.openDataInputStream/openInputStream:打开输入流3.openDataOutputStream/openOutputStream:打开输出流案例1:客户端与服务器端建立连接l ClientMIDlet1.java文件import javax.microedition.io.Connector;/客户端public class ClientMIDlet1 extends MIDlet protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void pauseApp() protected void startApp() throws MIDletStateChangeException tryConnector.open(socket:/:9999);catch(Exception ex)ex.printStackTrace();l ServerMIDlet1.java文件import javax.microedition.io.Connector;import javax.microedition.io.ServerSocketConnection;/服务器端public class ServerMIDlet1 extends MIDlet public ServerMIDlet1() protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void pauseApp() protected void startApp() throws MIDletStateChangeException try/监听某个端口ServerSocketConnection ssc = (ServerSocketConnection)Connector.open(socket:/:9999);/等待客户端连接,如果没有客户端连接,程序在这里阻塞System.out.println(ssc.getLocalAddress();/获取IP地址System.out.println(ssc.getLocalPort();/获取端口号ssc.acceptAndOpen();catch(Exception ex)ex.printStackTrace();案例2:客户端与服务器端建立连接.客户端向服务器端发送“Hello”,服务器端向客户端发送“Welcome to join us”l ClientMIDlet2.java文件import java.io.DataInputStream;import java.io.DataOutputStream;import javax.microedition.io.Connector;import javax.microedition.io.SocketConnection;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;/客户端public class ClientMIDlet2 extends MIDlet protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void pauseApp() protected void startApp() throws MIDletStateChangeException try/连接到服务器端,连接成功,返回的SocketConnection充当通信桥梁SocketConnection sc = (SocketConnection)Connector.open(socket:/:9999);/*以后就可以通过sc与服务端通信*/DataOutputStream dos = sc.openDataOutputStream();/输出信息dos.writeUTF(Hello);DataInputStream dis = sc.openDataInputStream();String msg = dis.readUTF();System.out.println(msg);catch(Exception ex)ex.printStackTrace();l ServerMIDlet2.java文件import java.io.DataInputStream;import java.io.DataOutputStream;import javax.microedition.io.Connector;import javax.microedition.io.ServerSocketConnection;import javax.microedition.io.SocketConnection;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;/服务器端public class ServerMIDlet2 extends MIDlet public ServerMIDlet2() protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void pauseApp() protected void startApp() throws MIDletStateChangeException try/监听某个端口ServerSocketConnection ssc = (ServerSocketConnection)Connector.open(socket:/:9999);/等待客户端连接,如果有客户端链接,acceptAndOpen方法返回的StreamConnection强制转换为SocketConnection充当通信桥梁SocketConnection sc = (SocketConnection)ssc.acceptAndOpen();/*以后就可以通过sc与客户端通信*/System.out.println(客户端: + sc.getAddress();DataInputStream dis = sc.openDataInputStream();String msg = dis.readUTF();System.out.println(msg);DataOutputStream dos = sc.openDataOutputStream();/输出信息dos.writeUTF(Welcome to join us);catch(Exception ex)ex.printStackTrace();案例3:简单聊天室程序(未经过优化,会抛出异常)l ChatClientMIDlet.java文件 /优化之前文件public class ChatClientMIDlet extends MIDlet implements CommandListenerprivate SocketConnection sc = null;/ *private Command cmdSend = new Command(发送,Command.SCREEN,1);private Form frmChat = new Form(聊天界面);private TextField tfMsg = new TextField(输入聊天信息,255,TextField.ANY);private Display display;protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void pauseApp() protected void startApp() throws MIDletStateChangeException display = Display.getDisplay(this);display.setCurrent(frmChat);frmChat.addCommand(cmdSend);frmChat.append(tfMsg);frmChat.setCommandListener(this);trysc = (SocketConnection)Connector.open(socket:/:9999);/ *new ReceiveThread().start();catch(Exception ex)ex.printStackTrace();public void commandAction(Command c, Displayable d) if(c=cmdSend)tryDataOutputStream dos = sc.openDataOutputStream();/ / * dos.writeUTF(tfMsg.getString();catch(Exception ex)/ex.printStackTrace();class ReceiveThread extends Threadpublic void run()while(true)tryDataInputStream dis = sc.openDataInputStream(); / * String msg = dis.readUTF();frmChat.append(msg + n);catch(Exception ex)ex.printStackTrace();l ChatServerMIDlet.java文件 /优化之前文件import java.io.DataInputStream;import java.io.DataOutputStream;import javax.microedition.io.Connector;import javax.microedition.io.ServerSocketConnection;import javax.microedition.io.SocketConnection;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.TextField;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class ChatServerMIDlet extends MIDlet implements CommandListenerprivate ServerSocketConnection ssc = null;private SocketConnection sc = null;/ * private Command cmdSend = new Command(发送,Command.SCREEN,1);private Form frmChat = new Form(聊天界面);private TextField tfMsg = new TextField(输入聊天信息,255,TextField.ANY);private Display display;protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void pauseApp() protected void startApp() throws MIDletStateChangeException display = Display.getDisplay(this);display.setCurrent(frmChat);frmChat.addCommand(cmdSend);frmChat.append(tfMsg);frmChat.setCommandListener(this);tryssc = (ServerSocketConnection)Connector.open(socket:/:9999);sc = (SocketConnection)ssc.acceptAndOpen();/ * new ReceiveThread().start();catch(Exception ex)ex.printStackTrace();public void commandAction(Command c, Displayable d) if(c=cmdSend)tryDataOutputStream dos = sc.openDataOutputStream();/ *dos.writeUTF(tfMsg.getString();catch(Exception ex)/ex.printStackTrace();class ReceiveThread extends Threadpublic void run()while(true)tryDataInputStream dis = sc.openDataInputStream(); / * String msg = dis.readUTF();frmChat.append(msg + n);catch(Exception ex)ex.printStackTrace();优化方式:删除处代码在处添加代码: private DataInputStream dis = null; private DataOutputStream dos = null;在处添加代码: dis = sc.openDataInputStream(); dos = sc.openDataOutputStream();聊天室程序1.ChatServerMIDletimport java.io.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class ChatServerMIDlet extends MIDlet implements CommandListenerprivate ServerSocketConnection ssc = null;private SocketConnection sc = null;private DataInputStream dis = null;private DataOutputStream dos = null;private boolean run = true;private TextField tfMsg = new TextField(输入聊天信息,255,TextField.ANY);private Command cmdSend = new Command(发送,Command.SCREEN,1);private Form frmChat = new Form(聊天界面);private Display display;protected void startApp() throws MIDletStateChangeException display = Display.getDisplay(this);display.setCurrent(frmChat);frmChat.addCommand(cmdSend);frmChat.append(tfMsg);frmChat.setCommandListener(this);tryssc = (ServerSocketConnection)Connector.open(socket:/:9999);sc = (SocketConnection)ssc.acceptAndOpen();dis = sc.openDataInputStream();dos = sc.openDataOutputStream();new ReceiveThread().start();catch(Exception ex)ex.printStackTrace();public void commandAction(Command c,Displayable d)if(c=cmdSend)trydos.writeUTF(tfMsg.getString();catch(Exception ex)class ReceiveThread extends Threadpublic void run()while(run)tryString msg = dis.readUTF();frmChat.append(msg + n);catch(Exception ex)ex.printStackTrace();close();public void close() trydos.close();dis.close();sc.close();ssc.close();catch(Exception ex)ChatClientMIDlet import example1.ChatServerMIDlet.ReceiveThread;public class ChatClientMIDlet extends MIDlet implements CommandListenerprivate SocketConnection sc = null;private DataInputStream dis = null;private DataOutputStream dos = null;private TextField tfMsg = new TextField(输入聊天信息,255,TextField.ANY);private Command cmdSend = new Command(发送,Command.SCREEN,1);private Form frmChat = new Form(聊天界面);private Display display;protected void startApp() throws MIDletStateChangeException display = Display.getDisplay(this);display.setCurrent(frmChat);frmChat.addCommand(cmdSend);frmChat.append(tfMsg);frmChat.setCommandListener(this);trysc = (SocketConnection)Connector.open(socket:/:9999);dis = sc.openDataInputStream();dos = sc.openDataOutputStream();new ReceiveThread().start();catch(Exception ex)ex.printStackTrace();public void commandAction(Command c,Displayable d)if(c=cmdSend)trydos.writeUTF(tfMsg.getString();catch(Exception ex)class ReceiveThread extends Threadpublic void run()while(true)tryString msg = dis.readUTF();frmChat.append(msg + n);catch(Exception ex)2Example2package example2;import java.io.DataOutputStream;import javax.microedition.io.Connector;import javax.microedition.io.ServerSocketConnection;import javax.microedition.io.SocketConnection;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class ChatServerMIDlet extends MIDlet implements Runnableprivate ServerSocketConnection ssc = null;private SocketConnection sc = null;protected void startApp() throws MIDletStateChangeException tryssc = (ServerSocketConnection)Connector.open(socket:/:9999);new Thread(this).start();catch(Exception ex)ex.printStackTrace();public void run()while(true)/不断接受客户端连接trysc = (SocketConnection)ssc.acceptAndOpen();DataOutputStream dos = sc.openDataOutputStream();dos.writeUTF(欢迎您的到来);/送给相应客户端catch(Exception ex)ex.printStackTrace();package example2;import java.io.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*public class ChatClientMIDlet extends MIDlet implements CommandListenerprivate SocketConnection sc = null;private DataInputStream dis = null;private DataOutputStream dos = null;private TextField tfMsg = new TextField(输入聊天信息,255,TextField.ANY);private Command cmdSend = new Command(发送,Command.SCREEN,1);private Form frmChat = new Form(聊天界面);private Display display;protected void startApp() throws MIDletStateChangeException display = Display.getDisplay(this);display.setCurrent(frmChat);frmChat.addCommand(cmdSend);frmChat.append(tfMsg);frmChat.setCommandListener(this);trysc = (SocketConnection)Connector.open(socket:/:9999);dis = sc.openDataInputStream();dos = sc.openDataOutputStream();new ReceiveThread().start();catch(Exception ex)ex.printStackTrace();public void commandAction(Command c,Displayable d)if(c=cmdSend)trydos.writeUTF(tfMsg.getString();catch(Exception ex)class ReceiveThread extends Threadpublic void run()while(true)tryString msg = dis.readUTF();frmChat.append(msg + n);catch(Exception ex)3.Example3package example3;import java.io.*;import javax.microedition.io.*;import javax.microedition.midlet.*;public class ChatServerMIDlet extends MIDlet implements Runnableprivate ServerSocketConnection ssc = null;private SocketConnection sc = null;protected void startApp() throws MIDletStateChangeException tryssc = (ServerSocketConnection)Connector.open(socket:/:9999);new Thread(this).start();catch(Exception ex)ex.printStackTrace();public void run()while(true)/不断接受客户端连接trysc = (SocketConnection)ssc.acceptAndOpen();/读取昵称DataInputStream dis = sc.openDataInputStream();String nickName = dis.readUTF();DataOutputStream dos = sc.openDataOutputStream();dos.writeUTF(欢迎+nickName+的到来);/送给相应客户端catch(Exception ex)ex.printStackTrace();package example3; public class ChatClientMIDlet extends MIDlet implements CommandListenerprivate SocketConnection sc = null;private DataInputStream dis = null;private DataOutputStream dos = null;private TextField tfMsg = new TextField(输入聊天信息,255,TextField.ANY);private Command cmdSend = new Command(发送,Command.SCREEN,1);private Form frmChat = new Form(聊天界面);private Display display;private TextField tfNickName = new TextField(输入昵称,10,TextField.ANY);private Command cmdLogin = new Command(登陆到服务器,Command.SCREEN,1);protected void startApp() throws MIDletStateChangeException display = Display.getDisplay(this);display.setCurrent(frmChat);frmChat.addCommand(cmdLogin);frmChat.append(tfNickName);frmChat.setCommandListener(this);public void commandAction(Command c,Displayable d)if(c=cmdSend)trydos.writeUTF(tfMsg.getString();catch(Exception ex)else if(c=cmdLogin)tryfrmChat.removeCommand(cmdLogin);frmChat.addCommand(cmdSend);frmChat.append(tfMsg);/添加发送聊天信息的文本框new ChatThread().start();catch(Exception ex)ex.printStackTrace();class ChatThread extends Threadpublic void run()trysc = (SocketConnection)Connector.open(socket:/:9999);dis = sc.openDataInputStream();dos = sc.openDataOutputStream();dos.writeUTF(tfNickName.getString();/发送昵称this.start();catch(Exception ex)ex.printStackTrace();while(true)tryString msg = dis.readUTF();frmChat.append(msg + n);catch(Exception ex)4.Example4package example4;public class ChatServerMIDlet extends MIDlet implements Runnableprivate ServerSocketConnection ssc = null;private SocketConnection sc = null;private Form frm = new Form(聊天纪录);private Display dis;protected void startApp() throws MIDletStateChangeException dis = Display.getDisplay(this);dis.setCurrent(frm);tryssc = (ServerSocketConnection)Connector.open(socket:/:9999);new Thread(this).start();catch(Exception ex)ex.printStackTrace();public void run()while(true)/不断接受客户端连接trysc = (SocketConnection)ssc.acceptAndOpen();/开一个线程给这个客户端new ChatThread(sc).start();catch(Exception ex)ex.printStackTrace();class ChatThread extends Threadprivate SocketConnection sc;private DataInputStream dis;private DataOutputStream dos;private String nickName;public ChatThread(SocketConnection sc)this.sc = sc;this.nickName = nickName;trydis = sc.openDataInputStream();dos = sc.openDataOutputStream();/读取昵称nickName = dis.readUTF();dos.writeUTF(欢迎+nickName+的到来);/送给相应客户端catch(Exception ex)ex.printStackTrace();public void run()/负责读取相应SocketConnection的信息while(true)tryString str = dis.readUTF();frm.append(nickName + 说: + str + n);catch(Exception ex)ex.printStackTrace(); package example4;public class ChatClientMIDlet extends MIDlet implements CommandListenerprivate SocketConnection sc = null;private DataInputStream dis = null;private DataOutputStream dos = null;private TextField tfMsg = new TextField(输入聊天信息,255,TextField.ANY);private Command cmdSend = new Command(发送,Command.SCREEN,1);private Form frmChat = new Form(聊天界面);private Display display;private TextField tfNickName = new TextField(输入昵称,10,TextField.ANY);private Command cmdLogin = new Command(登陆到服务器,Command.SCREEN,1);protected void startApp() throws MIDletStateChang

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论