Java實(shí)現(xiàn)單線程聊天室_第1頁(yè)
Java實(shí)現(xiàn)單線程聊天室_第2頁(yè)
Java實(shí)現(xiàn)單線程聊天室_第3頁(yè)
Java實(shí)現(xiàn)單線程聊天室_第4頁(yè)
Java實(shí)現(xiàn)單線程聊天室_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論