打開Server Socket,創建一個服務器型套接字和一個普通套接字,服務器型套接字在指定端口為客戶端請求的Socket 服務;? 使用ServerSocket類的accept()方法使服務器型套接字處于監聽狀態并把監聽結果返回給普通套接字;? 為該普通套接字創建輸入和輸出流;? 從輸入和輸出流中讀入或寫入字節流,進行相應的處理,并將結果返回給客戶端;? 在客戶端和服務器工作結束后關閉所有的對象,如服務器型的套接字,普通套接字,輸入和輸出流。正是由于Java系統具有基于Socket的靈活通信機制,因而其應用程序能自由地打開和訪問網絡上的對象,就象在本地文件系統中一樣。(2) Applet之間的通信:Applet之間的通信使用Applet Context類的getApplet()方法。只要在程序中加入 Applet oneapplet=getAppletContext().getApplet(“first”);便可使用name為first的Applet中的方法了。在該課題中大量使用了該種通信方法,因為專門同服務器端通信的 Applet中包含接收信息方法和發送信息方法,所有客戶端的Applet都要使用負責通信的Applet中的方法,所以客戶端的Applet同負責通信的Applet必須進行通信。 copyright paper51.com
//服務器端程序S.java 負責與客戶端通信這部分的代碼? 如下
http://www.paper51.com
import java.io.*;import java.net.*;import java.lang.*;import T2; 內容來自論文無憂網 www.paper51.com
class ThreadEchoHandler extends Thread //創建線程{T2 theT2=new T2(); paper51.com
Socket incoming;int counter; 內容來自www.paper51.com
ThreadEchoHandler(Socket i,int c){ incoming=i;counter=c; } copyright paper51.com
public void run(){try{DataInputStream in=new DataInputStream(incoming.getInputStream());DataOutputStream out=new DataOutputStream(incoming.getOutputStream());System.out.println ("hello"); boolean done=false; http://www.paper51.com
while(!done){ String aa="";String str=in.readUTF(); //從客戶端得到字符串
內容來自論文無憂網 www.paper51.com
//在此加入各自的服務程序 copyright paper51.com
System.out.println (str);
內容來自www.paper51.com
theT2.pass(str); //解碼theT2.tongji(); //修改監控庫中的信息 copyright paper51.com
aa=theT2.guan(); //操縱數據庫System.out.println ("string z is:"+aa); copyright paper51.com
if(aa.compareTo("null")!=0 ) //若是查詢數據庫,返回查詢后的結果{ //若不是查詢數據庫,不向客戶端輸出信息 out.writeUTF(aa);out.flush(); }}//while
內容來自www.paper51.com
incoming.close(); //線程關閉
內容來自論文無憂網 www.paper51.com
}//try
內容來自論文無憂網 www.paper51.com
catch(IOException e){System.out.println(e);}}//end run}
paper51.com
//----------------------------------------class S{ public static void main(String[] args){ int i=1;try{ServerSocket s=new ServerSocket(1111);for(;;){Socket incoming=s.accept();System.out.println("connect: "+i);new ThreadEchoHandler(incoming,i).start();i++;}}catch(Exception e){ System.out.println(e); }} } http://www.paper51.com
copyright paper51.com
//客戶端通信小應用程序 Echo.java
copyright paper51.com
import java.io.*;import java.net.*;import java.awt.*;import java.applet.*; 內容來自論文無憂網 www.paper51.com
public class Echo extends Applet{TextArea ta;Socket echoSocket;DataOutputStream os;DataInputStream is;String Line;
內容來自論文無憂網 www.paper51.com
public void init() { setBackground(Color.white);ta=new TextArea(5,80);ta.setEditable(false);add(ta); try{echoSocket=new Socket("10.102.4.41",1111);} //與服務器建立連接catch(IOException e){System.out.println("error");} copyright paper51.com
} 內容來自www.paper51.com
//本系統還做成了系統托盤,比較時尚的小功能 http://www.paper51.com
http://www.paper51.com
融合了JDK1。6的全新功能
paper51.com
public void st(String stri) //發送字符串的方法{try{ DataOutputStream os=new DataOutputStream(echoSocket.getOutputStream());DataInputStream is=new DataInputStream(echoSocket.getInputStream()); os.writeUTF(""+ stri ); //向服務器輸送stringos.flush();}catch(IOException e){System.out.println(" error:"+e); } } http://www.paper51.com
public String st1() //接收字符串的方法{String Line="";try{ DataOutputStream os=new DataOutputStream(echoSocket.getOutputStream());DataInputStream is=new DataInputStream(echoSocket.getInputStream()); Line=is.readUTF(); //從服務器讀來的信息ta.appendText(""+Line); //在文本域中輸出信息}catch(IOException e){System.out.println(" error:"+e); }return Line;
http://www.paper51.com
以上代碼全部實現下面的功能模塊
copyright paper51.com
(1)??????????????}歡迎界面 copyright paper51.com
(2)??????????????用戶登陸界面
paper51.com
(3)??????????????主功能界面
paper51.com
(4)??????????????創建界面
copyright paper51.com
(5)??????????????查詢界面(單一查詢和全部查詢)
內容來自論文無憂網 www.paper51.com
(6)??????????????添加信息界面 http://www.paper51.com
(7)??????????????用戶信息修改界面
paper51.com
(8)??????????????幫助界面} http://www.paper51.com
程序調試心得:1) 在建立Socket連接時,兩端的端口號必須設為一致,否則建立不了連接。服務器端必須有主機IP地址或主機名參數。2) 連接建立好之后應確定輸入和輸出流。起初程序中用的是DataInputStream和PrintStream,結果只能傳輸英文,傳輸中文時產生亂碼,將PrintStream改為DataOutputStream,使用readUTF()和writeUTF()方法后,中文傳輸問題得到解決。3) 如果一個使用某端口的程序沒有關閉,另一個程序就不能使用這個端口。4) 開始進行通信的程序均為 Application,因不符合客戶機/服務器機制,應將客戶端的Application改為Applet。其轉化的主要步驟如下:? 創建一個包含APPLET標簽的HTML文件;? 去掉應用程序中的main()方法;? 類名應繼承Applet類,而不是Frame類,并在程序開頭加入import java.applet.*;語句;? 用init()方法代替Application程序中的構造方法,當瀏覽器創建Applet類對象的時候,它自動執行init()方法;? 如Application中缺省使用了BorderLayout布局管理器,應在Applet的init()方法中重新設定;? 如果Application中有setTitle()方法,必須將其去掉,如Application中使用了菜單,在Applet中用按鈕來替換。5) 懂得了在一程序中如何引用自定義的類中的方法和變量,在程序開頭加入import 類名;在程序中加入 類名實例=new 類名(); 然后使用 實例.方法(),實例.變量即可
paper51.com