技术开发 频道

java编写TCP方式的通信程序

  【IT168 技术文档】 

  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通信程序的原理.

  希望各位朋友批评.大家共同学习交流.

0
相关文章