[Java][網絡編程]服務端向客戶端發送信息

/*前置知識(服務端)1.首先要常見一個ServerSocket對象 服務端套接字,并且在服務端套接字里面確定需要使用的端口2.然后要創建一個Socket對象來接收ServerSocket的返回值。通常一個Socket對象對應一個客戶端/涉及到多個客戶端需要通過線程來解決3.現在客戶端和服務端已經通過socket鏈接了,然后就需要創建一個InputStream的輸入流來獲取socket所對應客戶端的流入內容4.然后很關鍵的一點:需要創建一個ByteArrayOutPutStream這樣的 字符數組的輸出流來在控制臺輸出內容5.創建一個緩沖的字節數組Byte[] 然后給定它的大小 比如10246.現在我們進入循環讀取客戶端傳進流的信息的時候了,因此需要調用接收傳入流的ips中的read方法7.然后將讀取到的內容放入到Byte[]數組中,然后通過ByteArrayOutputStream的write方法將Byte[]數組輸出在控制臺8.因為客戶端輸入的信息一般都是字符串 因此我們需要把baos這個ByteArrayOutputStream轉換成String9.我們得把創建對象 和把對對象賦值的部分都留在try-with-resources結構里面 這樣可以避免手動關閉對象對資源的占用*/
/*
前置知識(客戶端):
1.還是先把try-with-resources結構擺出來
2.因為我們是客戶端,希望輸出內容,我們就得先和服務端鏈接
3.我們創建一個Socket套接字,先給本地安排一個地址,然后端口得和服務端對上
比如我們是服務端ip為127.0.0.1 端口為8090 我們就得把這個套接字對準8090和127.0.0.1
4.接下來我們依然是要和服務端一樣依托io流來完成信息的傳遞
比如我們依然需要創建一個OutputStream對象,然后讓這個對象和Socket發生關聯 比如getOutputStream這個方法
5.我們在OutputStream這個對象和Socket產生關聯之后 就可以調用OutputStream來調用write方法來輸出文字了
6.我們要切記:我們只能在此輸入字節類型的文件 因此需要調用getByte().*/
/*前置知識(客戶端):1.還是先把try-with-resources結構擺出來2.因為我們是客戶端,希望輸出內容,我們就得先和服務端鏈接3.我們創建一個Socket套接字,先給本地安排一個地址,然后端口得和服務端對上比如我們是服務端ip為127.0.0.1 端口為8090 我們就得把這個套接字對準8090和127.0.0.14.接下來我們依然是要和服務端一樣依托io流來完成信息的傳遞比如我們依然需要創建一個OutputStream對象,然后讓這個對象和Socket發生關聯 比如getOutputStream這個方法5.我們在OutputStream這個對象和Socket產生關聯之后 就可以調用OutputStream來調用write方法來輸出文字了6.我們要切記:我們只能在此輸入字節類型的文件 因此需要調用getByte().*/import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class TCPClient {public static void main(String[] args) {String serverHost = "127.0.0.1";int serverPort = 8888;try {// 創建socket連接服務器Socket socket = new Socket(serverHost, serverPort);// 獲取輸入輸出流BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);while (true) {// 從控制臺讀取用戶輸入的消息System.out.print("請輸入要發送的消息:");String message = reader.readLine();// 發送消息到服務器writer.println(message);// 如果輸入的消息為"bye",則退出循環if (message.equals("bye")) {break;}// 從服務器接收消息BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String serverMessage = serverReader.readLine();System.out.println("服務器返回的消息: " + serverMessage);}// 關閉連接socket.close();} catch (IOException e) {e.printStackTrace();}}}
/*前置知識(服務端)1.首先要常見一個ServerSocket對象 服務端套接字,并且在服務端套接字里面確定需要使用的端口2.然后要創建一個Socket對象來接收ServerSocket的返回值。通常一個Socket對象對應一個客戶端/涉及到多個客戶端需要通過線程來解決3.現在客戶端和服務端已經通過socket鏈接了,然后就需要創建一個InputStream的輸入流來獲取socket所對應客戶端的流入內容4.然后很關鍵的一點:需要創建一個ByteArrayOutPutStream這樣的 字符數組的輸出流來在控制臺輸出內容5.創建一個緩沖的字節數組Byte[] 然后給定它的大小 比如10246.現在我們進入循環讀取客戶端傳進流的信息的時候了,因此需要調用接收傳入流的ips中的read方法7.然后將讀取到的內容放入到Byte[]數組中,然后通過ByteArrayOutputStream的write方法將Byte[]數組輸出在控制臺8.因為客戶端輸入的信息一般都是字符串 因此我們需要把baos這個ByteArrayOutputStream轉換成String9.我們得把創建對象 和把對對象賦值的部分都留在try-with-resources結構里面 這樣可以避免手動關閉對象對資源的占用*/import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TCPServer {public static void main(String[] args) {int serverPort = 8888;try {// 創建ServerSocket監聽指定端口ServerSocket serverSocket = new ServerSocket(serverPort);System.out.println("等待客戶端連接...");// 等待客戶端連接Socket clientSocket = serverSocket.accept();System.out.println("客戶端連接成功!");// 獲取輸入輸出流BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);while (true) {// 接收客戶端發送的消息String clientMessage = reader.readLine();// 如果客戶端發送的消息為"bye",則退出循環if (clientMessage.equals("bye")) {break;}System.out.println("接收到的消息: " + clientMessage);// 發送消息給客戶端writer.println("已接收到消息:" + clientMessage);}// 關閉連接clientSocket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451575.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python】如何判斷一個字符串為空

#方法一 if oneString: print "not empty" else: print "empty" #方法二 if oneString "": print "empty" else: print "not empty"

LRU 實現緩存

LRU:Least Recently used 最近最少使用 1.使用LinkedHashMap實現 inheritance實現方式 繼承map類 可以使用Collections.synchronizedMap方式實現線程安全的操作 public class LruCache<K,V> extends LinkedHashMap<K,V> {private final int MAX_CACHE_SIZE;public …

使用vsftp作為集群的yum倉庫

地址規劃&#xff1a;vsftp服務器的地址為172.16.1.61使用的環境&#xff1a;[rootnfs01 scripts]# uname -a Linux nfs01 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux首先在yum服務器上掛載本地光盤mkdir /media/cdrom ;mount…

純做技術是自娛自樂 拋開技術做技術才是出路

短短一生不過數十載&#xff0c;對于很多人而言&#xff0c;作IT、作技術只是生命中的某一段&#xff0c;并非所有。而無論是換工作還是換行業&#xff0c;只是一種形式而已&#xff0c;最終我們追求的是成功、是榮譽、是收獲。于是在年輕的這幾年里&#xff0c;作為技術人員理…

TOAD連接Oracle數據庫失敗:OCI_INVALID_HANDLE解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. toad 連接Oracle數據庫連接失敗如圖&#xff1a; 2. 導致這個情況的前因&#xff1a;toad運行情況下&#xff0c;突然斷電。 3. 解決…

多線程三大特性:原子性、有序性、可見性

參考文獻&#xff1a;三大性質總結&#xff1a;原子性&#xff0c;有序性&#xff0c;可見性 感謝作者分享&#xff01;

git checkout 和 git reset

git checkout 主要有三個作用&#xff1a; 第一個就是切換分支。例如你從遠程倉庫clone下來所有的源代碼&#xff0c;你git branch一下會看到你通常是在master&#xff0c;如果你想切換到某一個分支上呢&#xff1f;git checkout <branchname>第二個就是放棄對某個文件的…

python-訪問者模式

源碼地址:https://github.com/weilanhanf/PythonDesignPatterns 說明&#xff1a; 訪問者模式的基本想法是&#xff0c;軟件系統中擁有一個由許多對象構成的、比較穩定的對象結構&#xff0c;這些對象的類都擁有一個 accept 方法用來接受訪問者對象的訪問。訪問者是一個接口&am…

面試題:Fibonacci數列

題目描述&#xff1a;大家都知道斐波那契數列&#xff0c;現在要求輸入一個整數n&#xff0c;請你輸出斐波那契數列的第n項&#xff08;從0開始&#xff0c;第0項為0&#xff09;。 方法1&#xff1a;遞歸 public class Solution {public int Fibonacci(int n) {if (n 0){retu…

“行到水窮處,坐看云起時.“

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 自由自在&#xff0c;隨意而行&#xff0c; 只沿著流水向上&#xff0c;不知不覺的就走到了泉眼盡頭&#xff0c; 無路可走的時候 &…

git commit -m和git commit -am

字面解釋的話&#xff0c;git commit -m用于提交暫存區的文件&#xff1b;git commit -am用于提交跟蹤過的文件 要理解它們的區別&#xff0c;首先要明白git的文件狀態變化周期&#xff0c;如下圖所示 工作目錄下面的所有文件都不外乎這兩種狀態&#xff1a;已跟蹤或未跟蹤。已…

磁盤結構簡介

這里講的主要是網上所謂的老式磁盤&#xff0c;它是由一個個盤片組成的&#xff0c;我們先從個盤片結構講起。如圖1所示&#xff0c;圖中的一圈圈灰色同心圓為一條條磁道&#xff0c;從圓心向外畫直線&#xff0c;可以將磁道劃分為若干個弧段&#xff0c;每個磁道上一個弧段被稱…

java中的對象監視器

參考文章&#xff1a;監視器–JAVA同步基本概念 感謝作者分享&#xff01;

Yii1.1 CGridView 簡單使用

Yii1.1 CGridView 簡單使用 配置model文件&#xff0c;返回CActiveDataProvider對象。public function search() {$criterianew CDbCriteria;$criteria->compare(title,$this->title,true);$criteria->compare(type,$this->type);$criteria->compare(addr,$this…

3個著名加密算法(MD5、RSA、DES)的解析

MD5的全稱是Message-Digest Algorithm 5&#xff0c;在90年代初由MIT的計算機科學實驗室和RSA Data Security Inc發明&#xff0c;經MD2、MD3和MD4發展而來。 MD5將任意長度的“字節串”變換成一個128bit的大整數&#xff0c;并且它是一個不可逆的字符串變換算法&#x…

想念我的大大的石

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 // ------- 甘愿用我的一生去追尋 ... 想念我的大石頭&#xff1a; 想念會默默陪著我&#xff0c;一直從烈日咫尺坐到黃昏浸透蔓蔓云層…

Java 中的悲觀鎖、樂觀鎖、自旋鎖、適應性自旋鎖、偏向鎖、輕量級鎖、重量級鎖、公平鎖、非公平鎖、可重入鎖、共享鎖等

參考文獻&#xff1a; 不可不說的Java“鎖”事 java并發進階 感謝美團技術團隊&#xff01; 感謝JavaGuide&#xff01;

Git 的origin和master解析

首先要明確一點&#xff0c;對git的操作是圍繞3個大的步驟來展開的&#xff08;其實幾乎所有的SCM都是這樣&#xff09; 1. 從git取數據&#xff08;git clone&#xff09; 2. 改動代碼 3. 將改動傳回git&#xff08;git push&#xff09; 這3個步驟又涉及到兩個re…

end to end testing

概念 https://www.softwaretestinghelp.com/what-is-end-to-end-testing/ What is “End to End Testing”? Term “End to End testing” is defined as a testing method which determines whether the performance of an application is as per the requirement or not. It…

windows下安裝mysql 開機啟動

1 下載地址 http://dev.mysql.com/downloads/installer/ 2 下載版本 mysql community server 5.7.x 這個版本是一個傻瓜版本&#xff0c;設置root密碼之后就可以啟動服務了&#xff0c;不用自己配置&#xff0c;還有workbench可用。轉載于:https://www.cnblogs.com/hustdc/p/91…