日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java 网络通信必备之socket通信基本原理介绍

發(fā)布時(shí)間:2024/1/23 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 网络通信必备之socket通信基本原理介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java socket通信基本原理介紹

Java socket通信在不斷的進(jìn)行相關(guān)代碼的開發(fā),下面我們就看看如何才能更好的使用有關(guān)技術(shù)為我們的編程工作帶來一定的幫助。

作者:佚名來源:互聯(lián)網(wǎng)|2010-03-18 20:13

?

?

Java socket通信在Java語(yǔ)言中是一個(gè)使用很廣泛的工具,下面我們就來仔細(xì)的學(xué)習(xí)下有關(guān)的方法。這對(duì)大家在以后的使用中有所幫助,只有不斷的學(xué)習(xí)才能更好的使用。

所謂Java socket通信通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。

以J2SDK-1.3為例,Socket和ServerSocket類庫(kù)位于java.net包中。ServerSocket用于服務(wù)器端, Socket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來說, 套接字是平等的,并沒有差別,不因?yàn)樵诜?wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過 SocketImpl類及其子類完成的。

重要的Socket API:

java.net.Socket繼承于java.lang.Object,有八個(gè)構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見JDK-1.3文檔。Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶端的Socket對(duì)象實(shí)例。"阻塞"是一個(gè)術(shù)語(yǔ),它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(huì)話產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。

getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè)IutputStream對(duì)象實(shí)例。

getOutputStream方法連接的另一端將得到輸入,同時(shí)返回一個(gè)OutputStream對(duì)象實(shí)例。

注意:其中g(shù)etInputStream和getOutputStream方法均會(huì)產(chǎn)生一個(gè)IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象使用。

如何開發(fā)一個(gè)Server-Client模型的程序

Java socket通信開發(fā)原理:

服務(wù)器,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。

客戶端,使用Java socket通信對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉Socket。客戶端不需要指定打開的端口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè)1024以上的端口。

重要的Socket API:

java.net.Socket繼承于java.lang.Object,有八個(gè)構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見JDK-1.3文檔。Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶端的Socket對(duì)象實(shí)例。"阻塞"是一個(gè)術(shù)語(yǔ),它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(huì)話產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。

getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè)IutputStream對(duì)象實(shí)例。

getOutputStream方法連接的另一端將得到輸入,同時(shí)返回一個(gè)OutputStream對(duì)象實(shí)例。

注意:其中g(shù)etInputStream和getOutputStream方法均會(huì)產(chǎn)生一個(gè)IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象使用。

如何開發(fā)一個(gè)Server-Client模型的程序

Java socket通信開發(fā)原理:

服務(wù)器,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。

客戶端,使用Java socket通信對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉Socket。客戶端不需要指定打開的端口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè)1024以上的端口。

下面和大家分享的是服務(wù)器的實(shí)現(xiàn)代碼。

?
  • import?java.net.*; ?
  • import?java.io.*; ?
  • import?java.awt.event.ActionEvent; ?
  • import?java.awt.event.ActionListener; ?
  • public?class?talkServer ?
  • {?public?static?void?main(String[]?args) ?
  •  {?try?
  • {?file://建立服務(wù)器 ?
  •  ServerSocket?server?=?new?ServerSocket(9998); ?
  •  int?i=1; ?
  •  for(;;) ?
  • {?Socket?incoming?=?server.accept(); ?
  •  new?ServerThread(incoming,i).start(); ?
  •  i++; ?
  • } ?
  •  }catch?(IOException?ex){ ?
  •  ex.printStackTrace(); ?
  • } ?
  •  } ?
  • }?
  • ?

    ?
  • class?ServerThread?extends?Thread?implements?ActionListener ?
  • { ?
  •  private?int?threadNum; ?
  •  private?Socket?socket; ?
  •  talkServerFrm?t; ?
  •  BufferedReader?in; ?
  •  PrintWriter?out; ?
  •  private?boolean?talking=true; ?
  •  public?ServerThread(Socket?s,int?c) ?
  •  {?threadNum?=?c; ?
  • socket?=?s; ?
  •  }?
  • ?
  • public?void?actionPerformed(ActionEvent?e) ?
  • {?Object?source?=?e.getSource(); ?
  •  try{ ?
  • if(source==t.btnSend) ?
  •  {?out.println(t.getTalk()); ?
  • t.clearTalk(); ?
  • }else?
  • if(source==t.btnEnd) ?
  •  {?out.println("談話過程被對(duì)方終止"); ?
  • out.close(); ?
  • in.close(); ?
  • talking?=?false; ?
  •  } ?
  •  }catch(IOException?ex){ ?
  •  } ?
  • }?
  • ?
  • public?void?run() ?
  • {?try{ ?
  • t=new?talkServerFrm(new?Integer(threadNum).toString(),this); ?
  • t.setSize(500,500); ?
  • t.show(); ?
  • in?=?new?BufferedReader(new? ?
  •  ?InputStreamReader(socket.getInputStream())); ?
  • out?=?new?PrintWriter(socket.getOutputStream(),true); ?
  •  }catch(Exception?e){ ?
  • } ?
  •  new?Thread() ?
  •  {?public?void?run() ?
  • {?try{ ?
  • while(true) ?
  • {?checkInput(); ?
  •  sleep(1000); ?
  • } ?
  •  }catch?(InterruptedException?ex){ ?
  •  }catch(IOException?ex){ ?
  •  } ?
  •  } ?
  •  }.start(); ?
  •  while(talking) ?
  •  {?} ?
  •  t.dispose(); ?
  •  }?
  • ?
  • private?void?checkInput()?throws?IOException ?
  • {?String?line; ?
  •  if((line=in.readLine())!=null) ?
  • t.setPartner(line);?file://這是界面類里的方法, ?
  • file://用來將line的內(nèi)容輸出到用戶界面 ?
  •  } ?
  • }??
  • 到此,java中的socket網(wǎng)絡(luò)編程就給大家介紹完啦

    總結(jié)

    以上是生活随笔為你收集整理的Java 网络通信必备之socket通信基本原理介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。