熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java做一個最簡單的Socket通話程序

2013-11-23 18:51:25  來源: Java核心技術 

  Java中的網絡編程是一個很重要的部分也是其編程優越性的地方之一在Java中有一個專門的類庫來管理網絡編程的有關方法
    下面先介紹在Java中怎樣用socket進行客戶與服務器通信最後再介紹一個一個最簡單的通話程序
  
  一怎樣用socket進行客戶與服務器通信
    在Java中用socket進行客戶/服務器之間的通信編程Socket是兩個實體之間進行通信的有效端點通過socket可以獲得源IP地址和源端口終點IP地址和終點端口用戶可以將多個socket連入同一個端口以便對於單個端口可以有多個連接通過socket客戶/服務器編程可以創建一個能被許多人使用的分布式程序並且所有客戶均可以用統一的前端進行工作並與服務器進行通信
    要想與服務器通信必須具備三個條件服務器程序客戶程序和連接它們的socket程序這三個部分缺一不可但是客戶與服務器之間的通信有很多的方式其中另一個方法是把客戶作為索取者把服務器作為給予者下面我們看一看Java的服務器編程
    在Java中服務器有個主要的功能
    在類庫中通過構造一個ServerSocket類的實例使服務器能夠檢測到指定端口的信息用ServerSocke中的accept()方法可以使服務器檢測到指定端口的活動另外服務器還負責檢測要求與它連接的客戶
  ·Socket類的實例代表客戶與服務器連接成功通過編程可以使多個用戶通過同一個端口與服務器相連其中都是Socket 類的實例
    可以分別用Socket類的getInputStream()和getOutStream()方法來發送和捕捉數據其使用方法如下
  
    try{
      ServerSocket myServerSocket=new ServerSocket();
      Socket mySocket=myServerSocketaccept();
    }catch(Exception e){}
  
    在上面的代碼中首先構造一個ServerSocket類的實例並傳遞給它一個整數作為服務器指定可以使用的給定端口如下
  
    ServerSocket myServerSocket=new ServerSocket()
  
    在Java程序中如果每次構造ServerSocket時都能保持捕捉異常事件則就隨時指定了准備使用的端口下面的代碼使用accept()方法來檢測端口的活動
  
    Socket mySocket=myServerSocketaccept();
  
    Accept()方法直到接收到用戶的連接請求才繼續執行中斷的執行程序一旦客戶的連接成功mySocket就代表該連接並且可以發送和接收數據
  最後我們看一看客戶是怎樣請求連接的其連接方法如下
  
    try{
      Socket mySocket=new Socket();
    }catch(Exception e ){}
  
    通過上面的代碼可能看出也是通過Socket類來實現的下面我們通過一個網絡編程的實例來說明如何進行網絡通信
  
  二一個最簡單的通話程序
  
  通話器服務器:
  import *;
  import javaio*;
  import javalang*;
  
  public class myserver{
  public static void main(String args[]){
  ServerSocket server;
  Socket socket;
  String s;
  InputStream Is;
  OutputStream Os;
  DataInputStream DIS;
  PrintStream PS;
  
  try{
  //在端口注冊服務
  server=new ServerSocket();
  socket=serveraccept();   //監聽窗口等待連接
  
  Systemoutprintln(server ok);
  Systemoutprintln(************************************************);
  Systemoutprintln();
  
  //獲得對應Socket的輸入/輸出流
  Is=socketgetInputStream();
  Os=socketgetOutputStream();
  //建立數據流
  DIS=new DataInputStream(Is);
  PS=new PrintStream(Os);
  DataInputStream in=new DataInputStream(Systemin);
  while(true){
  Systemoutprintln();
  Systemoutprintln(please wait clients message);
  Systemoutprintln();
  s=DISreadLine(); //讀入從client傳來的字符串
  Systemoutprintln(client said:+s); //打印字符串
  if(strim()equals(BYE))break; //如果是BYE就退出
  Systemoutprint(you say:);
  s=inreadLine(); //讀取用戶輸入的字符串
  PSprintln(s); //將讀取得字符串傳給client
  if(strim()equals(BYE))break; //如果是BYE就退出
  
  }
  
  //關閉連接
  DISclose(); //關閉數據輸入流
  PSclose(); //關閉數據輸出流
  Isclose(); //關閉輸入流
  Osclose(); //關閉輸出流
  socketclose(); //關閉sockey
  }
  catch(Exception e){
  Systemoutprintln(Error:+e);
  }
  }
  }
  
  
  通話器客戶端
  import *;
  import javaio*;
  import javalang*;
  
  public class myclient{
  public static void main(String args[]){
  if (argslength<1){ //判斷命令加參數沒有
  System.out.println("you forget the name of the server!");
  System.out.println("see also: myclient yxf");
  System.exit(1); //如果沒加參數就退出
  }
  
  Socket socket;
  String s="";
  String len;
  InputStream Is;
  OutputStream Os;
  DataInputStream DIS;
  PrintStream PS;
  try{
  //向主機名為args[0]的服務器申請連接
  //注意端口號要與服務器保持一致:4321
  socket=new Socket(args[0],4321);
  
  System.out.println("client ok");
  System.out.println("************************************************");
  System.out.println("");
  
  //獲得對應socket的輸入/輸出流
  Is=socket.getInputStream();
  Os=socket.getOutputStream();
  //建立數據流
  DIS=new DataInputStream(Is);
  PS=new PrintStream(Os);
  DataInputStream in=new DataInputStream(System.in);
  
  while(true){
  System.out.print("you say:");
  s=in.readLine(); //讀取用戶輸入的字符串
  PS.println(s); //將讀取得字符串傳給server
  if(s.trim().equals("BYE"))break; //如果是"BYE",就退出
  else
  {
  System.out.println("");
  System.out.println("please wait server's message...");
  System.out.println("");
  }
  s=DIS.readLine(); //從服務器獲得字符串
  System.out.println("server said:"+s); //打印字符串
  if(s.trim().equals("BYE"))break; //如果是"BYE",就退出
  
  }
  
  //關閉連接
  DIS.close(); //關閉數據輸入流
  PS.close(); //關閉數據輸出流
  Is.close(); //關閉輸入流
  Os.close(); //關閉輸出流
  socket.close(); //關閉socket
  }
  catch(Exception e){
  System.out.println("Error:"+e);
  }
  }
  }

From:http://tw.wingwit.com/Article/program/Java/hx/201311/25869.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.