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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA socket编程实例

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA socket编程实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

事實上網絡編程簡單的理解就是兩臺計算機相互通訊數據而已.對于程序員而言,去掌握一種編程接口并使用一種編程模型相對就會顯得簡單的多了.Java SDK提供一些相對簡單的Api來完成這些工作.Socket就是其中之一.對于Java而言.這些Api存在與java.net 這個包里面.因此只要導入這個包就可以準備網絡編程了.?
網絡編程的基本模型就是客戶機到服務器模型.簡單的說就是兩個進程之間相互通訊,然后其中一個必須提供一個固定的位置,而另一個則只需要知道這個固定的位置.并去建立兩者之間的聯系..然后完成數據的通訊就可以了.這里提供固定位置的通常稱為服務器,而建立聯系的通常叫做客戶端.基于這個簡單的模型,就可以進入網絡編程啦.?
Java對這個模型的支持有很多種Api.而這里我只想介紹有關Socket的編程接口.對于Java而言已經簡化了Socket的編程接口.首先我們來討論有關提供固定位置的服務方是如何建立的.Java提供了ServerSocket來對其進行支持.事實上當你創建該類的一個實力對象并提供一個端口資源你就建立了一個固定位置可以讓其他計算機來訪問你.?
Java代碼? ?
  • ServerSocket?server=new?ServerSocket(6789);??
  • 這里稍微要注意的是端口的分配必須是唯一的.因為端口是為了唯一標識每臺計算機唯一服務的.另外端口號是從0~65535之間的,前1024個端口已經被Tcp/Ip 作為保留端口,因此你所分配的端口只能是1024個之后的.好了.我們有了固定位置.現在所需要的就是一根連接線了.該連接線由客戶方首先提出要求.因此Java同樣提供了一個Socket對象來對其進行支持.只要客戶方創建一個Socket的實例對象進行支持就可以了.?
    Java代碼? ?
  • Socket?client=new?Socket(InetAddress.getLocalHost(),5678);??

  • 客戶機必須知道有關服務器的IP地址.對于著一點Java也提供了一個相關的類InetAddress 該對象的實例必須通過它的靜態方法來提供.它的靜態方法主要提供了得到本機IP 和通過名字或IP直接得到InetAddress的方法.?
    好了.上面的方法基本可以建立一條連線讓兩臺計算機相互交流了.可是數據是如何傳輸的呢?事實上I/O操作總是和網絡編程息息相關的.因為底層的網絡是繼續數據的.除非遠程調用,處理問題的核心在執行上.否則數據的交互還是依賴于IO操作的.所以你也必須導入java.io這個包.java的IO操作也不復雜.它提供了針對于字節流和Unicode的讀者和寫者,然后也提供了一個緩沖用于數據的讀寫.?
    Java代碼? ?
  • BufferedReader?in=??
  • new?BufferedReader(new?InputStreamReader(server.getInputStream()));???
  • PrintWriter?out=new?PrintWriter(server.getOutputStream());???

  • 上面兩句就是建立緩沖并把原始的字節流轉變為Unicode可以操作.而原始的字節流來源于Socket的兩個方法.getInputStream()和getOutputStream()方.分別用來得到輸入和輸出.那么現在有了基本的模型和基本的操作工具.我們可以做一個簡單的Socket例程了.?
    服務方:?
    Java代碼? ?
  • import?java.io.*;???
  • import?java.net.*;???
  • ??
  • public?class?MyServer?{???
  • public?static?void?main(String[]?args)?throws?IOException{???
  • ServerSocket?server=new?ServerSocket(5678);???
  • Socket?client=server.accept();???
  • BufferedReader?in=??
  • new?BufferedReader(new?InputStreamReader(client.getInputStream()));???
  • PrintWriter?out=new?PrintWriter(client.getOutputStream());???
  • while(true){???
  • String?str=in.readLine();???
  • System.out.println(str);???
  • out.println("has?receive....");???
  • out.flush();???
  • if(str.equals("end"))???
  • break;???
  • }???
  • client.close();???
  • }???
  • }???


  • 這個程序的主要目的在于服務器不斷接收客戶機所寫入的信息只到.客戶機發送"End"字符串就退出程序.并且服務器也會做出"Receive"為回應.告知客戶機已接收到消息.?

    客戶機代碼:?
    Java代碼? ?
  • import?java.net.*;???
  • import?java.io.*;???
  • ??
  • public?class?Client{???
  • static?Socket?server;???
  • ??
  • public?static?void?main(String[]?args)throws?Exception{???
  • server=new?Socket(InetAddress.getLocalHost(),5678);???
  • BufferedReader?in=??
  • new?BufferedReader(new?InputStreamReader(server.getInputStream()));???
  • PrintWriter?out=new?PrintWriter(server.getOutputStream());???
  • BufferedReader?wt=new?BufferedReader(new?InputStreamReader(System.in));???
  • ??
  • while(true){???
  • String?str=wt.readLine();???
  • out.println(str);???
  • out.flush();???
  • if(str.equals("end")){???
  • break;???
  • }???
  • System.out.println(in.readLine());???
  • }???
  • server.close();???
  • }???
  • }???

  • 客戶機代碼則是接受客戶鍵盤輸入,并把該信息輸出,然后輸出"End"用來做退出標識.?

    這個程序只是簡單的兩臺計算機之間的通訊.如果是多個客戶同時訪問一個服務器呢?你可以試著再運行一個客戶端,結果是會拋出異常的.那么多個客戶端如何實現呢??
    其實,簡單的分析一下,就可以看出客戶和服務通訊的主要通道就是Socket本身.而服務器通過accept方法就是同意和客戶建立通訊.這樣當客戶建立Socket的同時.服務器也會使用這一根連線來先后通訊.那么既然如此只要我們存在多條連線就可以了.那么我們的程序可以變為如下:?

    服務器:?

    Java代碼? ?
  • import?java.io.*;???
  • import?java.net.*;???
  • ??
  • public?class?MyServer?{???
  • public?static?void?main(String[]?args)?throws?IOException{???
  • ServerSocket?server=new?ServerSocket(5678);???
  • while(true){???
  • Socket?client=server.accept();???
  • BufferedReader?in=??
  • new?BufferedReader(new?InputStreamReader(client.getInputStream()));???
  • PrintWriter?out=new?PrintWriter(client.getOutputStream());???
  • while(true){???
  • String?str=in.readLine();???
  • System.out.println(str);???
  • out.println("has?receive....");???
  • out.flush();???
  • if(str.equals("end"))???
  • break;???
  • }???
  • client.close();???
  • }???
  • }???
  • }???

  • 這里僅僅只是加了一個外層的While循環.這個循環的目的就是當一個客戶進來就為它分配一個Socket直到這個客戶完成一次和服務器的交互,這里也就是接受到客戶的"End"消息.那么現在就實現了多客戶之間的交互了.但是.問題又來了.這樣做雖然解決了多客戶,可是是排隊執行的.也就是說當一個客戶和服務器完成一次通訊之后下一個客戶才可以進來和服務器交互.無法做到同時服務.那么要如何才能同時達到既能相互之間交流又能同時交流呢?很顯然這是一個并行執行的問題了.所以線程是最好的解決方案.?
    那么下面的問題是如何使用線程.首先要做的事情是創建線程并使得其可以和網絡連線取得聯系.然后由線程來執行剛才的操作.要創建線程要么直接繼承Thread要么實現Runnable接口,要建立和Socket的聯系只要傳遞引用就可以了.而要執行線程就必須重寫run方法.而run方法所做的事情.就是剛才單線程版本main所做的事情.因此我們的程序變成了這樣:?
    Java代碼? ?
  • import?java.net.*;???
  • import?java.io.*;???
  • ??
  • public?class?MultiUser?extends?Thread{???
  • private?Socket?client;???
  • ??
  • public?MultiUser(Socket?c){???
  • this.client=c;???
  • }???
  • ??
  • public?void?run(){???
  • try{???
  • BufferedReader?in=??
  • new?BufferedReader(new?InputStreamReader(client.getInputStream()));???
  • PrintWriter?out=new?PrintWriter(client.getOutputStream());???
  • //Mutil?User?but?can't?parallel???
  • while(true){???
  • String?str=in.readLine();???
  • System.out.println(str);???
  • out.println("has?receive....");???
  • out.flush();???
  • if(str.equals("end"))???
  • break;???
  • }???
  • client.close();???
  • }catch(IOException?ex){???
  • }finally{???
  • ??
  • }???
  • }???
  • ??
  • public?static?void?main(String[]?args)throws?IOException{???
  • ServerSocket?server=new?ServerSocket(5678);???
  • while(true){???
  • //transfer?location?change?Single?User?or?Multi?User???
  • MultiUser?mu=new?MultiUser(server.accept());???
  • mu.start();???
  • }???
  • }???
  • }???

  • 我的類直接從Thread類繼承了下來.并且通過構造函數傳遞引用和客戶Socket建立了聯系.這樣每個線程就有了.一個通訊管道.同樣我們可以填寫run方法.把之前的操作交給線程來完成.這樣多客戶并行的Socket就建立起來了.

    轉載于:https://my.oschina.net/tianyuyangliu/blog/109540

    總結

    以上是生活随笔為你收集整理的JAVA socket编程实例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 男女av| 午夜免费福利 | 丁香花高清视频完整电影 | 日本视频不卡 | 欧美在线网站 | 一级片99 | 欧美色图亚洲视频 | 欧美亚洲国产成人 | 午夜免费在线 | 原创少妇半推半就88av | 日韩欧美三级在线观看 | 可以免费看毛片的网站 | 国产精品theporn | 精品国产午夜福利在线观看 | 国产香蕉视频在线 | 国产丝袜高跟 | 久久久久中文 | 性色在线观看 | 国产美女又黄又爽又色视频免费 | 在线观看免费小视频 | tube极品少妇videos | 国产精品99久久久久久久女警 | 天天操天天玩 | 国产精品三级久久久久久电影 | 欧美精品在欧美一区二区 | 99热这里只有精品久久 | 五月天免费网站 | 欧美三级免费看 | 有码视频在线观看 | 中国a级大片 | 国产人成无码视频在线观看 | 久久99免费视频 | 青青草手机在线 | 日韩在线观看av | 蜜桃精品在线观看 | 91欧美国产 | 亚洲妇女无套内射精 | 91女人18毛片水多国产 | 激情视频免费在线观看 | 毛片一级在线观看 | 日本五十路在线 | 亚洲一区二区在线 | 欧美高跟鞋交xxxxxhd | 在线观看不卡av | 少妇人妻好深好紧精品无码 | 伊人称影院 | 加勒比成人在线 | 美国毛片av | 日本久久中文字幕 | 极品探花在线 | 国产人妻一区二区 | 欧美一区国产一区 | 免费看91的网站 | 国产精品美女在线观看 | 欧亚av| 日韩无码精品一区二区三区 | 精品影院| 日韩中文在线视频 | 亚洲精品久久久乳夜夜欧美 | www在线视频| 国产亚洲欧美精品久久久www | 性色av网址 | 国产在线观看免费av | 一极黄色大片 | 懂色av一区二区三区四区 | jlzzjizz在线播放观看 | 村上凉子av| 性一交一乱一色一视频麻豆 | 色婷婷av一区二区 | 国产专区自拍 | 嫩草www | 国产啊v在线 | 亚洲一本之道 | 亚洲午夜在线播放 | 欧美日韩免费看 | 草草草在线 | 国产一区二区三区 | 女人脱下裤子让男人捅 | 亚洲狠 | 中国黄色大片 | 爱爱爱爱网站 | 国产一区美女 | 一区二区三区av夏目彩春 | 国产免费看片 | 亚洲男人天堂久久 | 黄色一级黄色片 | 五月婷婷视频在线 | av手机网站| 亚洲色图偷 | 涩里番在线观看 | a亚洲精品 | 日韩天堂一区 | 国产乱人乱偷精品视频a人人澡 | 一级成人免费 | 丰满熟妇人妻av无码区 | 熟妇人妻中文字幕无码老熟妇 | 中国国产黄色片 | 国产精品国产三级国产aⅴ 欧美bbbbbbbbbbbb18av | 日韩黄片一区二区三区 |