ch33實(shí)驗(yàn)十七網(wǎng)絡(luò)編程(一)Socket通信_(tái)第1頁
ch33實(shí)驗(yàn)十七網(wǎng)絡(luò)編程(一)Socket通信_(tái)第2頁
ch33實(shí)驗(yàn)十七網(wǎng)絡(luò)編程(一)Socket通信_(tái)第3頁
ch33實(shí)驗(yàn)十七網(wǎng)絡(luò)編程(一)Socket通信_(tái)第4頁
ch33實(shí)驗(yàn)十七網(wǎng)絡(luò)編程(一)Socket通信_(tái)第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、. . . . 實(shí)驗(yàn) Scoket編程知識(shí)一實(shí)驗(yàn)?zāi)康模? 掌握J(rèn)DK的安裝和環(huán)境變量的配置2 掌握WTK的安裝3 能夠使用JDK和WTK完成基本的實(shí)驗(yàn)容二實(shí)驗(yàn)容javax.microedition.io包中的容構(gòu)成了通用連接框架Socket通信開發(fā)流程:1.服務(wù)器監(jiān)聽某個(gè)端口2.客戶端連接服務(wù)器某個(gè)端口3.通過SocketConnection通信服務(wù)器監(jiān)聽某個(gè)端口:服務(wù)器端IP通過ssc的getLocalAddress()獲得,例如127.0.0.11.通過javax.microedition.io.ServerSocketConnetion接口2.java.microedition.io.C

2、onnector負(fù)責(zé)建立各種連接open("socket:/:端口"),返回ServerSocketConnection3.如果有客戶端連接上來,可以用ServerSocketConnection.accepteAndOpen()返回SocketConnectionSocketConnection重要方法:1.getAddress():2.openDataInputStream/openInputStream:打開輸入流3.openDataOutputStream/openOutputStream:打開輸出流案例1:客戶端與服務(wù)器端建立連接l ClientMIDlet1.j

3、ava文件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:/127.0.0.1:9999&quo

4、t;);catch(Exception ex)ex.printStackTrace();l ServerMIDlet1.java文件import javax.microedition.io.Connector;import javax.microedition.io.ServerSocketConnection;/服務(wù)器端public class ServerMIDlet1 extends MIDlet public ServerMIDlet1() protected void destroyApp(boolean arg0) throws MIDletStateChangeException

5、 protected void pauseApp() protected void startApp() throws MIDletStateChangeException try/監(jiān)聽某個(gè)端口ServerSocketConnection ssc = (ServerSocketConnection)Connector.open("socket:/:9999");/等待客戶端連接,如果沒有客戶端連接,程序在這里阻塞System.out.println(ssc.getLocalAddress();/獲取IP地址System.out.println(ssc.getLocalPor

6、t();/獲取端口號(hào)ssc.acceptAndOpen();catch(Exception ex)ex.printStackTrace();案例2:客戶端與服務(wù)器端建立連接.客戶端向服務(wù)器端發(fā)送“Hello”,服務(wù)器端向客戶端發(fā)送“Welcome to join us”l ClientMIDlet2.java文件import java.io.DataInputStream;import java.io.DataOutputStream;import javax.microedition.io.Connector;import javax.microedition.io.SocketConnec

7、tion;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 MIDletStateChang

8、eException try/連接到服務(wù)器端,連接成功,返回的SocketConnection充當(dāng)通信橋梁SocketConnection sc = (SocketConnection)Connector.open("socket:/127.0.0.1:9999");/*以后就可以通過sc與服務(wù)端通信*/DataOutputStream dos = sc.openDataOutputStream();/輸出信息dos.writeUTF("Hello");DataInputStream dis = sc.openDataInputStream();Stri

9、ng 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.SocketCo

10、nnection;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;/服務(wù)器端public class ServerMIDlet2 extends MIDlet public ServerMIDlet2() protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void pauseApp() protected void startA

11、pp() throws MIDletStateChangeException try/監(jiān)聽某個(gè)端口ServerSocketConnection ssc = (ServerSocketConnection)Connector.open("socket:/:9999");/等待客戶端連接,如果有客戶端,acceptAndOpen方法返回的StreamConnection強(qiáng)制轉(zhuǎn)換為SocketConnection充當(dāng)通信橋梁SocketConnection sc = (SocketConnection)ssc.acceptAndOpen();/*以后就可以通過sc與客戶端通信*/

12、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:簡(jiǎn)單聊天室

13、程序(未經(jīng)過優(yōu)化,會(huì)拋出異常)l ChatClientMIDlet.java文件 /優(yōu)化之前文件public class ChatClientMIDlet extends MIDlet implements CommandListenerprivate SocketConnection sc = null;/ *private Command cmdSend = new Command("發(fā)送",Command.SCREEN,1);private Form frmChat = new Form("聊天界面");private TextField tfMs

14、g = 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.setC

15、urrent(frmChat);frmChat.addCommand(cmdSend);frmChat.append(tfMsg);frmChat.setCommandListener(this);trysc = (SocketConnection)Connector.open("socket:/127.0.0.1:9999");/ *new ReceiveThread().start();catch(Exception ex)ex.printStackTrace();public void commandAction(Command c, Displayable d) i

16、f(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

17、(msg + "n");catch(Exception ex)ex.printStackTrace();l ChatServerMIDlet.java文件 /優(yōu)化之前文件import java.io.DataInputStream;import java.io.DataOutputStream;import javax.microedition.io.Connector;import javax.microedition.io.ServerSocketConnection;import javax.microedition.io.SocketConnection;impor

18、t javax.microedition.lcdui mand;import javax.microedition.lcdui mandListener;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.microed

19、ition.midlet.MIDletStateChangeException;public class ChatServerMIDlet extends MIDlet implements CommandListenerprivate ServerSocketConnection ssc = null;private SocketConnection sc = null;/ * private Command cmdSend = new Command("發(fā)送",Command.SCREEN,1);private Form frmChat = new Form("

20、;聊天界面");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 = Di

21、splay.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

22、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

23、 = sc.openDataInputStream(); / * String msg = dis.readUTF();frmChat.append(msg + "n");catch(Exception ex)ex.printStackTrace();優(yōu)化方式:刪除處代碼在處添加代碼: private DataInputStream dis = null;private DataOutputStream dos = null;在處添加代碼: dis = sc.openDataInputStream();dos = sc.openDataOutputStream();聊天室程

24、序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 DataInpu

25、tStream dis = null;private DataOutputStream dos = null;private boolean run = true;private TextField tfMsg = new TextField("輸入聊天信息","",255,TextField.ANY);private Command cmdSend = new Command("發(fā)送",Command.SCREEN,1);private Form frmChat = new Form("聊天界面");privat

26、e 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");s

27、c = (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 Recei

28、veThread 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)ChatClientMIDletimport example1.ChatServerMIDle

29、t.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

30、cmdSend = new Command("發(fā)送",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

31、);frmChat.setCommandListener(this);trysc = (SocketConnection)Connector.open("socket:/127.0.0.1:9999");dis = sc.openDataInputStream();dos = sc.openDataOutputStream();new ReceiveThread().start();catch(Exception ex)ex.printStackTrace();public void commandAction(Command c,Displayable d)if(c=cm

32、dSend)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.Connect

33、or;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

34、= 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 = (SocketConne

35、ction)ssc.acceptAndOpen();DataOutputStream dos = sc.openDataOutputStream();dos.writeUTF("歡迎您的到來");/送給相應(yīng)客戶端catch(Exception ex)ex.printStackTrace();package example2;import java.io.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*public clas

36、s 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("

37、;發(fā)送",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.setCommandListene

38、r(this);trysc = (SocketConnection)Connector.open("socket:/127.0.0.1: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

39、.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 clas

40、s 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(Exce

41、ption 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+"的到來")

42、;/送給相應(yīng)客戶端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("輸入聊天信息"

43、;,"",255,TextField.ANY);private Command cmdSend = new Command("發(fā)送",Command.SCREEN,1);private Form frmChat = new Form("聊天界面");private Display display;private TextField tfNickName = new TextField("輸入昵稱","",10,TextField.ANY);private Command cmdLogin = n

44、ew Command("登陸到服務(wù)器",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,Disp

45、layable d)if(c=cmdSend)trydos.writeUTF(tfMsg.getString();catch(Exception ex)else if(c=cmdLogin)tryfrmChat.removeCommand(cmdLogin);frmChat.addCommand(cmdSend);frmChat.append(tfMsg);/添加發(fā)送聊天信息的文本框new ChatThread().start();catch(Exception ex)ex.printStackTrace();class ChatThread extends Threadpublic void

46、 run()trysc = (SocketConnection)Connector.open("socket:/127.0.0.1:9999");dis = sc.openDataInputStream();dos = sc.openDataOutputStream();dos.writeUTF(tfNickName.getString();/發(fā)送昵稱this.start();catch(Exception ex)ex.printStackTrace();while(true)tryString msg = dis.readUTF();frmChat.append(msg

47、+ "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("聊天紀(jì)錄");private Display dis;protected void startApp() thro

48、ws 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.acceptAndOp

49、en();/開一個(gè)線程給這個(gè)客戶端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;

50、trydis = sc.openDataInputStream();dos = sc.openDataOutputStream();/讀取昵稱nickName = dis.readUTF();dos.writeUTF("歡迎"+nickName+"的到來");/送給相應(yīng)客戶端catch(Exception ex)ex.printStackTrace();public void run()/負(fù)責(zé)讀取相應(yīng)SocketConnection的信息while(true)tryString str = dis.readUTF();frm.append(nickNam

51、e + "說:" + 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

52、 = new TextField("輸入聊天信息","",255,TextField.ANY);private Command cmdSend = new Command("發(fā)送",Command.SCREEN,1);private Form frmChat = new Form("聊天界面");private Display display;private TextField tfNickName = new TextField("輸入昵稱","",10,TextField.ANY);private Command cmdLogin = new Command("登陸到服務(wù)器",Command.SCREEN,1);protected void startApp() throws

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論