目的
今天的學(xué)習(xí)關(guān)于面對(duì)網(wǎng)絡(luò)而言的。眾所周知吟温。網(wǎng)絡(luò)在如今的大環(huán)境下是不可逆的主流序仙,而網(wǎng)絡(luò)無(wú)外乎服務(wù)器,客戶端鲁豪,數(shù)據(jù)庫(kù)等主要部分潘悼,今天實(shí)現(xiàn)了不同計(jì)算機(jī)的交互,進(jìn)行聊天操作爬橡,使用 Java 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的聊天程序, 實(shí)現(xiàn)服務(wù)器端接收到客戶端發(fā)來的消息, 使用了java.net.socket包. 通過socket 實(shí)現(xiàn) client — server 之間的通訊.治唤。涉及的知識(shí)主要有多線程以及Scoket類使用。話不多說糙申,Start宾添!
運(yùn)用知識(shí)
-
IP地址
-
客戶端簡(jiǎn)單實(shí)用
-
多線程實(shí)現(xiàn)對(duì)聊
-
使用繼承IOException類
過程
-
學(xué)習(xí)筆記
/**
- 網(wǎng)絡(luò)編程
- 在兩臺(tái)不同的計(jì)算機(jī)之間實(shí)現(xiàn)數(shù)據(jù)傳輸
1.qq聊天
2.網(wǎng)易app 刷新界面
3.打開瀏覽器 網(wǎng)頁(yè) www.baidu.com
- 客戶端:手機(jī)app 瀏覽器 桌面qq 用戶使用的平臺(tái)
- 服務(wù)器端:存儲(chǔ)、處理數(shù)據(jù)
- URL:統(tǒng)一的資源定位
- www.baidu.com: 域名 表示一臺(tái)網(wǎng)絡(luò)中的電腦
ip地址 唯一標(biāo)識(shí)某一臺(tái)電腦 32位——>4部分 8字節(jié)
172.20.10.15<-->www.baidu.com
- DNS服務(wù)器 域名解析
- IP地址唯一標(biāo)識(shí)一臺(tái)電腦
- 端口號(hào)唯一標(biāo)識(shí)電腦上正在運(yùn)行的一個(gè)程序
- 網(wǎng)絡(luò)中數(shù)據(jù)傳輸 Socket類 客戶端 ServerSocket 服務(wù)器端
*/ -
直接步入主題柜裸,開始寫/demo
要完成這個(gè)demo缕陕,實(shí)現(xiàn)服務(wù)器與客戶端對(duì)話,首先要有客戶端和服務(wù)器疙挺。對(duì)其的要求是扛邑,在其中一方的字符能實(shí)時(shí)顯示在另外一方,同時(shí)可以實(shí)現(xiàn)交互铐然。那么就要有服務(wù)器Server以及客戶端Client
- 客戶端Client類代碼:
class Client1{
public static void main(String[] args) throws IOException {
//連接服務(wù)器 獲取socket
Socket socket = new Socket("127.0.0.1",8080);
//創(chuàng)建服務(wù)器端對(duì)應(yīng)的輸入流 用于接收服務(wù)器端發(fā)來的數(shù)據(jù)
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(br.readLine());
//向服務(wù)器端發(fā)送文件(圖片)
//1.將文件寫入到內(nèi)存里
String path = "C:\\Users\\myk的小老弟\\Desktop\\ps素材\\feker.jpg";
FileInputStream fis = new FileInputStream(path);
//2.創(chuàng)建字節(jié)流 outputStream
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
byte[] buf = new byte[1024];
int len = -1;
while ((len = fis.read(buf)) != -1){
bos.write(buf,0,len);
}
socket.shutdownOutput();
}
}
- 服務(wù)器類代碼:
class Server1{
public static void main(String[] args) throws IOException {
//創(chuàng)建服務(wù)器端的ServerSoket
ServerSocket ss = new ServerSocket(8080);
//監(jiān)聽客戶端連接
//當(dāng)有客戶端來連接這個(gè)服務(wù)器 就可以得到對(duì)應(yīng)的socket
//當(dāng)沒有客戶端來連接 服務(wù)器一直在這里等待
Socket socket = ss.accept();
//創(chuàng)建客戶端對(duì)應(yīng)的輸出流 用于向這個(gè)客戶端發(fā)送數(shù)據(jù)
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println("連接成功 可以發(fā)數(shù)據(jù)了蔬崩!");
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
String path = "C:\\Users\\myk的小老弟\\Desktop\\雜文檔";
FileOutputStream fos = new FileOutputStream(path);
byte[] buf = new byte[1024];
int len = -1;
while((len = bis.read(buf)) != -1){
fos.write(buf,0,len);
}
}
}
-
效果如下
1.運(yùn)行服務(wù)器:
2.運(yùn)行客戶端:
總結(jié)
具體的話,服務(wù)器和客戶端是分開電腦分別實(shí)現(xiàn)锦爵,只要地址以及端口正確就能實(shí)現(xiàn)交互。多人交互我還沒理清楚奥裸,繼續(xù)加油