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通信程序的原理. 希望各位朋友批评.大家共同学习交流. 本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( ProgramFan.Com ) |