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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java网络编程并实现一对一聊天室功能

發布時間:2023/12/20 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java网络编程并实现一对一聊天室功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java網絡編程

目錄

  • Java網絡編程
      • 1、計算機網絡
      • 2、網路通信的要素
          • TCP/IP模型:
      • 3、IP
          • IP地址的分類
      • 4、端口
      • 5、通信協議
          • TCP 和 UDP 對比
      • 6、TCP
          • 1、基礎通信
          • 2、文件上傳
      • 7、UDP
          • 1、基礎通信
          • 2、多線程一對一聊天室

1、計算機網絡

計算機網絡:計算機網絡是指將地理位置不同具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作,網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享信息傳遞的計算機系統。

2、網路通信的要素

通信雙方地址: IP:端口號

規則:網絡通信的協議

TCP/IP模型:

  • 網絡編程中的兩個主要的問題

    • 如何準確的定位到網絡上的一臺主機?ip:端口號 定位到這個計算機上的某個資源

    • 找到了主機,如何傳輸數據呢?

  • 網絡編程中的要素

    • IP 和 端口號
    • 網絡通信協議:UDP 和 TCP
  • 萬物皆對象 – Java

  • 3、IP

    IP地址:InetAddress.java

    • 唯一定位一臺網絡上的計算機
    • 127.0.0.1 :代表本機地址,也叫 localhost
    IP地址的分類
    • IPV4 / IPV6

      • IPV4: 例:127.0.0.1 ,由四個字節組成,每個字節大小為0~255;全球共42億個IPV4地址,30億在北美,4億在亞洲,2011年就用盡了

      • IPV6:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
        它是128位的,用":"分成8段,每個X是一個16進制數(16 = 2^4);

    • 公網(互聯網) / 私網(局域網)

      • 局域網:192.168.1.1
      • ABCD類地址(需要了解)

    4、端口

    表示計算機上的一個程序的進程:

    • 不同的進程有不同的端口號
    • 被規定范圍是 0~65535 ,TCP / UDP 不同,各65535個端口號

    端口分類:

    • 公有端口 0~1023

      • HTTP:80
      • HTTPS:443
      • FTP:21
      • Telent:23
    • 程序可注冊端口:1024~49151,分配給用戶或程序

      • Tomcat:8080
      • MySQL:3306
      • Oracle:1521
    • 動態、私有:49151~65535

    • Java中獲取相關地址信息

      //查詢本地地址 InetAddress local0 = InetAddress.getByName("127.0.0.1"); InetAddress local1 = InetAddress.getByName("localhost"); InetAddress local2 = InetAddress.getLocalHost(); //查詢網絡地址 InetAddress address = InetAddress.getByName("www.baidu.com"); //常用方法 System.out.println(address.getHostAddress());//獲得ip System.out.println(address.getHostName()); //獲得域名

    Windows端口相關常用命令:

    netstat -ano #查看所有端口號 netstat -ano|findstr "8080" #查看8080端口號 tasklist|findstr "8080" #查看指定端口的進程 taskkill /f /t /im "進程id或者進程名稱" #殺掉進程

    5、通信協議

    • TCP:用戶傳輸協議
    • UDP:用戶數據報協議
    TCP 和 UDP 對比
    • TCP,類似于打電話

      • 需要連接,穩定

      • 三次握手,四次揮手


    • 客戶端、服務端

    • 傳輸完成,釋放連接,效率低

    • UDP,類似于發短信

      • 不連接,不穩定
      • 客戶端、服務端:沒有明確的界限
      • 不管對方需不需要接收,都發送
      • DDOS:洪水攻擊

    6、TCP

    1、基礎通信
  • 客戶端
  • 連接服務器 socket
  • 發送消息
  • 服務端
  • 建立服務的端口
  • 等待用戶的連接 accept
  • 接收消息
  • 客戶端核心代碼

    //1.要知道服務器的地址 InetAddress inetAddress = InetAddress.getByName("127.0.0.1"); int port = 9999; //2.創建一個socket連接 Socket socket = new Socket(inetAddress, port); //3.發送消息 IO流 OutputStream os = socket.getOutputStream(); os.write("您好,我是客戶端".getBytes(StandardCharsets.UTF_8)); //4.關閉資源 os.close(); socket。close();

    服務端核心代碼

    //1.要想讓客戶端連接,得有一個地址 ServerSocket serverSocket = new ServerSocket(9999); while (true){//循環接受客戶端發送的消息//2.等待客戶端連接過來Socket socket = serverSocket.accept();//3.讀取客戶端發送的數據InputStream inputStream = socket.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len = inputStream.read(buffer)) != -1){baos.write(buffer,0,len);}System.out.println(baos.toString()); } //4.關閉資源 baos.close(); inputStream.close(); socket.close(); serverSocket.close();
    2、文件上傳

    7、UDP

    1、基礎通信

    發送方代碼

    //1.建立一個socket DatagramSocket socket = new DatagramSocket(); //2.建個包,包里面是要發送的數據 String msg = "您好,我是udp客戶端"; InetAddress serverAddress = InetAddress.getByName("localhost"); int port = 9000; DatagramPacket packet = new DatagramPacket(msg.getBytes(StandardCharsets.UTF_8), 0, msg.getBytes(StandardCharsets.UTF_8).length, serverAddress, port); //3.發送數據 socket.send(packet); //4.關閉資源 socket.close();

    接受方代碼

    //1.開放端口 DatagramSocket socket = new DatagramSocket(9000); //2.接受數據包 byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length); socket.receive(packet);//阻塞接受 System.out.println(packet.getAddress().getHostAddress());//發送方地址 System.out.println(new String(packet.getData(),0,packet.getLength()));//數據 //3.關閉資源 socket.close();
    2、多線程一對一聊天室

    發送方代碼

    /*** 基于UDP的聊天室 -- 發送方*/ public class Sender implements Runnable {DatagramSocket socket = null;BufferedReader reader = null;private int sendPort;private int receivePort;private String receiveAddress;public Sender(int sendPort, String receiveAddress, int receivePort) {this.sendPort = sendPort;this.receivePort = receivePort;this.receiveAddress = receiveAddress;try {this.socket = new DatagramSocket(sendPort);this.reader = new BufferedReader(new InputStreamReader(System.in));} catch (SocketException e) {e.printStackTrace();}}@Overridepublic void run() {try {while (true){//2.準備要發送的數據,從控制臺獲取String line = reader.readLine();byte[] sendData = line.getBytes(StandardCharsets.UTF_8);//要發送的數據byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(sendData,0, sendData.length,new InetSocketAddress(this.receiveAddress, this.receivePort));//3.發送數據socket.send(packet);if (line.equals("bye")){break;}}}catch (Exception e){e.printStackTrace();}//4.關閉資源socket.close();} }

    接受方代碼

    /*** 基于UDP的聊天室 -- 接受方*/ public class Receiver implements Runnable {private int receivePort;DatagramSocket socket = null;public Receiver(int receivePort) {this.receivePort = receivePort;try {this.socket = new DatagramSocket(this.receivePort);} catch (SocketException e) {e.printStackTrace();}}@Overridepublic void run() {try {while (true){//循環接受數據//2.獲取對方發送的數據byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);socket.receive(packet);//打印數據內容String receivedData = new String(packet.getData(),0,packet.getLength()); System.out.println(packet.getAddress().getHostAddress()+":"+packet.getPort()+":"+receivedData);//當對方輸入bye時,斷開連接if (receivedData.equals("bye")){break;}}}catch (Exception e){e.printStackTrace();}//4.關閉資源socket.close();} }

    測試

    //用戶1 public class Test01 {public static void main(String[] args) {new Thread(new Receiver(9102)).start();new Thread(new Sender(9002,"localhost",9101)).start();} } //用戶2 public class Test02 {public static void main(String[] args) {new Thread(new Receiver(9101)).start();new Thread(new Sender(9001,"localhost",9102)).start();} }

    總結

    以上是生活随笔為你收集整理的Java网络编程并实现一对一聊天室功能的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 在线天堂6 | 麻豆 国产 | 日韩av中文字幕在线免费观看 | 亚洲第一免费播放区 | 日韩av无码一区二区三区不卡 | 日韩影视一区二区三区 | 日本成人一区 | 日批av | 先锋影音一区二区三区 | 久久特黄 | 国产特黄 | 91久久久久久 | 伦理片中文字幕 | 日本成人中文字幕 | 成人性爱视频在线观看 | 天天操天天干天天舔 | 制服丝袜av电影 | 日本一区二区三区四区五区 | www.jizz国产| 久久九九精品 | 天天干天天操天天操 | www.色日本 | 好吊妞一区二区三区 | 中文字幕成人动漫 | 伊人网视频 | 99久久精品一区二区成人 | 日韩在线免费看 | 狠狠艹av| 久久超| 乱码一区二区三区 | 高清18麻豆 | 欧美自拍亚洲 | 日韩黄网| 一区二区三区四区在线观看视频 | 日本不卡不卡 | 91精品福利视频 | 91精品国产自产91精品 | 亚洲黄色在线免费观看 | 久久久亚洲av波多野结衣 | 海角社区id| 欧美一区二区视频在线 | 色婷婷精品国产一区二区三区 | 亚洲一区二区欧美 | 国产鲁鲁视频在线观看免费 | 国产精品16p | 特黄特黄视频 | zzjj国产精品一区二区 | 在线观看亚洲天堂 | 日韩欧美国产成人精品免费 | 狠狠干2022| 精品国产精品三级精品av网址 | 精品国产一二三四区 | 日韩美女视频一区 | 久久久片| 国产a免费 | 性高潮久久久久久 | 欧美三区 | 日韩精品电影一区 | 黄色天堂网 | 色视频网 | 国产精品免费在线播放 | 天天天天天天天干 | 国产日本欧美一区二区 | 中文字幕在线观看第一页 | 天天撸天天操 | 精品久久久久久久久久久久 | 秋霞自拍 | 国产成人三级在线播放 | 一本一道久久综合狠狠老精东影业 | 热久久国产精品 | 手机看片久久 | 人人超碰97 | 男男车车的车车网站w98免费 | 国产真人无遮挡作爱免费视频 | 看片免费黄在线观看入口 | 国产视频一区二区三区在线 | 激情六月天婷婷 | 日本乱子伦xxxx| 欧美性受xxx黑人xyx性爽 | 草逼视频免费看 | 中文字幕在线三区 | www.日本精品| 一区二区激情 | 三级黄色免费网站 | 最新av观看 | 无码精品一区二区三区在线 | 免费大片在线观看www | 日本成人中文字幕 | 免费黄色网址在线 | 色综合狠狠| 日韩特级毛片 | 韩国伦理片在线看 | www.国产.com| 成人福利视频网站 | 久久久久麻豆 | 超碰在线成人 | 国产a国产片国产 | 国产黄色在线网站 | 久久精品一区二区 |