Java API中封裝了大量的函數(shù),供編寫網(wǎng)絡(luò)通信程序時使用. 這使得java在網(wǎng)絡(luò)方面具有強大的功能. 用java編寫TCP方式的通信程序比較簡單,但也有一些問題需要注意.
以下為監(jiān)聽主程序,監(jiān)聽程序在發(fā)現(xiàn)客戶端連接后,啟動一個會話socket線程,以實現(xiàn)實時發(fā)送,接收信息 和多客戶端同時工作. import java.io.*; import java.lang.*; import java.net.ServerSocket; import java.net.Socket; //主程序一直處于監(jiān)聽狀態(tài),有連接則啟動一個線程進行處理,以實現(xiàn)多個客戶端 public class listenserve { private ServerSocket ss; private boolean listening=true; public listenserve() { Init();//初始化 lisn();//啟動監(jiān)聽 } public void Init() { try { ss=new ServerSocket(10015,10); } catch(IOException ie) { System.out.println("無法在10015端口監(jiān)聽"); ie.printStackTrace(); } } public void lisn() { try { while(listening) new Thread(new dialogserve(ss.accept())).start(); } catch(IOException ie) {ie.printStackTrace();} } public static void main(String args[]) { new listenserve(); } }
//以下為會話主程序 應(yīng)該特別注意,如果客戶端先關(guān)閉,會話socket中可能拋出socketexception:connection reset 這應(yīng)該在程序中進行處理,這也是較易忽略的問題. import java.io.*; import java.lang.*; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; public class dialogserve implements Runnable { private Socket s; private InputStream in; private String rev,temp; private byte b[]; private int len; public dialogserve(Socket ss) { s=ss; b=new byte[1024]; try { in=s.getInputStream(); }catch(IOException ie) { ie.printStackTrace(); } rev=""; } public void run() { try { while(s.isConnected()==true) { if((len=in.read(b))!=-1) { temp=new String(b,0,len); rev+=temp; System.out.print(rev); temp=null; Thread.sleep(1000); } } in.close(); s.close(); System.out.println("會話socket已斷開!"); } catch(SocketException se) { System.out.println("客戶端已斷開!"); System.exit(0); } catch(IOException io) { io.printStackTrace(); System.exit(0); } catch(InterruptedException ire) { ire.printStackTrace();} } } //以下為客戶端主程序 import java.io.*; import java.net.Socket; import java.lang.*; public class client { private Socket con;//客戶端連接socket private OutputStream out; private String sen; private byte b[]; public client() { clientInit(); } public void clientInit() { try { con=new Socket("localhost",10015); con.setSoTimeout(10000); b=new byte[1024]; OutputStream out=con.getOutputStream(); sen="hello serve,以TCP方式發(fā)送數(shù)據(jù)!"; b=sen.getBytes(); out.write(b); out.flush(); out.close(); con.close(); } catch(IOException ie) { ie.toString(); } } public static void main(String args[]) { new client(); } } 總的來說,以上所列代碼較為簡單,但已基本反映出java編寫簡單tcp通信程序的原理. 希望各位朋友批評.大家共同學(xué)習(xí)交流.
|