java編寫TCP方式的通訊程式

來源:互聯網
上載者:User
程式  

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通訊程式的原理.
希望各位朋友批評.大家共同學習交流.




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.