| |
java api中封装了大量的函数,供编写网络通信程序时使用. 这使得java在网络方面具有强大的功能. 用java编写tcp方式的通信程序比较简单,但也有一些问题需要注意.
以下为监听主程序,监听程序在发现客户端连接后,启动一个会话socket线程,以实现实时发送,接收信息 和多客户端同时工作. import java.io.*; import java.lang.*; import java.net.serversocket; import java.net.socket; //主程序一直处于监听状态,有连接则启动一个线程进行处理,以实现多个客户端 public class listenserve { private serversocket ss; private boolean listening=true; public listenserve() { init();//初始化 lisn();//启动监听 } public void init() { try { ss=new serversocket(10015,10); } catch(ioexception ie) { system.out.println("无法在10015端口监听"); 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(); } }
//以下为会话主程序 应该特别注意,如果客户端先关闭,会话socket中可能抛出socketexception:connection reset 这应该在程序中进行处理,这也是较易忽略的问题. 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方式发送数据!"; 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通信程序的原理. 希望各位朋友批评.大家共同学习交流.
|
|