java编写TCP方式的通信程序

  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通信程序的原理.
  希望各位朋友批评.大家共同学习交流.