




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Java實(shí)現(xiàn)單線程聊天室本文實(shí)例為大家分享了Java實(shí)現(xiàn)單線程聊天室的具體代碼,供大家參考,具體內(nèi)容如下
一.SocketAPI簡(jiǎn)介
1.Socket編程
J.Socket類代表一個(gè)套接字,并且為服務(wù)器程序提供了一種來(lái)監(jiān)聽客戶端并與他們建立連接的一種機(jī)制.
套接字使用TCP提供了兩臺(tái)計(jì)算機(jī)之間的通信機(jī)制,客戶端創(chuàng)建一個(gè)套接字并嘗試連接服務(wù)器的套接字,當(dāng)連接建立時(shí),服務(wù)器就會(huì)創(chuàng)建一個(gè)Socket對(duì)象,客戶端和服務(wù)器就可以通過(guò)Socket對(duì)象的寫入和讀取來(lái)進(jìn)行通信,這就是聊天室的原理.
兩臺(tái)計(jì)算機(jī)使用套接字建立TCP連接時(shí)會(huì)出現(xiàn)以下步驟:
服務(wù)端實(shí)例化一個(gè)ServerSocket對(duì)象,表示通過(guò)服務(wù)器上的端口通信服務(wù)端調(diào)用ServerSocket的accept()方法,該方法將一直等待,直到客戶端連接上服務(wù)器上給定的端口服務(wù)端正在等待時(shí),一個(gè)客戶端實(shí)例化一個(gè)Socket對(duì)象,指定服務(wù)器名稱和端口號(hào)來(lái)請(qǐng)求連接Socket類的構(gòu)造函數(shù)試圖將客戶端連接到指定的服務(wù)器和端口號(hào)上,如果通信被建立,則在客戶端創(chuàng)建一個(gè)Socket對(duì)象能夠與服務(wù)端進(jìn)行通信在服務(wù)端,accept()方法返回服務(wù)器上一個(gè)新的socket引用,該socket連接到客戶端的socket
TCP是一個(gè)雙向通信協(xié)議,連接建立后,通過(guò)使用I/O流進(jìn)行通信,每一個(gè)socket都有一個(gè)輸出流和輸入流,客戶端的輸出流連接到服務(wù)端的輸入流,服務(wù)端的輸出流連接到客戶端的輸入流.
二.實(shí)現(xiàn)單線程模式的聊天室
首先我們來(lái)理清整個(gè)編程的思路:
socket編程
1.創(chuàng)建項(xiàng)目:
1.1服務(wù)器模塊ServerSocket
1.2客戶端模塊Socket
2.服務(wù)器端
2.1創(chuàng)建serverScoket,綁定端口
2.2接收客戶端連接,Socket
2.3通過(guò)Socket連接,發(fā)送和接收數(shù)據(jù)
2.4關(guān)閉ServerSocket/Socket
3.客戶端
3.1創(chuàng)建Socket,指定服務(wù)器的地址和端口號(hào)
3.2通過(guò)Socket發(fā)送和接收數(shù)據(jù)
3.3關(guān)閉Socket
1.服務(wù)端
packagesingle;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.io.OutputStreamWriter;
import.ServerSocket;
import.Socket;
importjava.util.Scanner;
*Author:weiwei
*description:單線程聊天室服務(wù)端
*Creat:2025/3/8
publicclasssingleThreadserver{
publicstaticvoidmain(String[]args){
try{
//1.創(chuàng)建服務(wù)端ServerSocket,監(jiān)聽6666端口
ServerSocketserverSocket=newServerSocket(6666);
System.out.println("服務(wù)器啟動(dòng)..."+serverSocket.
getLocalSocketAddress());
//服務(wù)器啟動(dòng),打印當(dāng)前地址
//2.接收客戶端連接
Socketsocket=serverSocket.accept();
//調(diào)用accept()方法
System.out.println("接收到客戶端連接..."+socket.
getRemoteSocketAddress());
//接收遠(yuǎn)程客戶端
//3.接收和發(fā)送數(shù)據(jù)
//3.1接收數(shù)據(jù)
InputStreaminputStream=socket.getInputStream();
//獲取字節(jié)流
Scannerscanner=newScanner(inputStream);
//字節(jié)流轉(zhuǎn)字符流
Stringmessage=scanner.nextLine();
//讀數(shù)據(jù),按行讀,讀一行
System.out.println("收到客戶端的消息:"+message);//打印接收到的消息
//3.2發(fā)送數(shù)據(jù)
OutputStreamoutputStream=socket.getOutputStream();
//獲取字節(jié)流
OutputStreamWriterwriter=newOutputStreamWriter(outputStream);//字節(jié)流轉(zhuǎn)字符流
writer.write("你好,客戶端,我很好.\n");
//寫數(shù)據(jù)
writer.flush();
//刷新(網(wǎng)通信)
//4.關(guān)閉
serverSocket.close();
System.out.println("服務(wù)器關(guān)閉");
}catch(IOExceptione){
e.printStackTrace();
}
}
}
2.客戶端
packagesingle;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.io.OutputStreamWriter;
import.Socket;
importjava.util.Scanner;
*Author:weiwei
*description:單線程聊天室客戶端
*Creat:2025/3/8
publicclasssingleThreadclient{
publicstaticvoidmain(String[]args){
try{
//1.創(chuàng)建Socket客戶端,連接指定服務(wù)地址和端口號(hào)
Socketsocket=newSocket("",6666);
System.out.println("客戶端創(chuàng)建..."+socket.
getLocalSocketAddress());
//客戶端創(chuàng)建,打印當(dāng)前地址
//2.Socket發(fā)送和接收數(shù)據(jù)
//2.1發(fā)送數(shù)據(jù)
OutputStreamoutputStream=socket.getOutputStream();
//獲取字節(jié)流
OutputStreamWriterwriter=newOutputStreamWriter(outputStream);
//字節(jié)流轉(zhuǎn)字符流
writer.write("你好,服務(wù)器.\n");
//寫數(shù)據(jù)
writer.flush();
//刷新
//2.2接收數(shù)據(jù)
InputStreaminputStream=socket.getInputStream();
//獲取字節(jié)流
Scannerscanner=newScanner(inputStream);
//字節(jié)流轉(zhuǎn)字符流
Stringmessage=scanner.nextLine();
//讀數(shù)據(jù),按行讀
System.out.println("接收到服務(wù)器的消息:"+message);//打印接收到的數(shù)據(jù)
//3.關(guān)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 非關(guān)系型數(shù)據(jù)庫(kù)知識(shí)試題及答案
- 技能培訓(xùn)總結(jié)范文(15篇)
- 聯(lián)網(wǎng)設(shè)備配置與管理試題及答案
- 樹木買賣合同集錦(16篇)
- 交通銀行鄭州分行網(wǎng)上企業(yè)銀行服務(wù)協(xié)議(13篇)
- 人工智能教育輔助軟件知識(shí)產(chǎn)權(quán)保護(hù)合同
- 電子商務(wù)網(wǎng)站建設(shè)試題
- 行政組織理論的基礎(chǔ)原則解析試題及答案
- 環(huán)視2025年行政組織理論考試的多元試題與答案
- 數(shù)據(jù)庫(kù)開發(fā)時(shí)常見的誤區(qū)試題及答案
- 肥胖癥康復(fù)課件
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術(shù)標(biāo)準(zhǔn)》
- 物理高考最后一課課件
- 八段錦操作評(píng)分標(biāo)準(zhǔn)
- 電解質(zhì)紊亂的心電圖表現(xiàn)
- ??低曉诰€測(cè)評(píng)筆試題
- 2022年修改后的銀行業(yè)G32表填報(bào)說(shuō)明
- 巨量-信息流(初級(jí))認(rèn)證考試(重點(diǎn))題庫(kù)(含答案)
- 硫磺車間風(fēng)險(xiǎn)辨識(shí)表
- 鑄造行業(yè)的危險(xiǎn)因素辨識(shí)及預(yù)防措施
- 《診斷學(xué)》病歷書寫-課件
評(píng)論
0/150
提交評(píng)論