資源簡介
項目不是很大,對于初學(xué)者比較費(fèi)勁,首先用到的技術(shù)有java文件操作,字符輸出輸入流,多線程,TCP通信等基礎(chǔ)知識,很好的實戰(zhàn)小項目,里面含有大量注釋幫助理解...

代碼片段和文件信息
package?chat;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.io.OutputStream;
import?java.io.OutputStreamWriter;
import?java.io.PrintWriter;
import?java.io.UnsupportedEncodingException;
import?java.io.Writer;
import?java.net.Socket;
import?java.net.UnknownHostException;
import?java.util.Scanner;
/**
?*?聊天室的客戶端
?*?@author?samsung
?*/
public?class?client?{
/**
?*?java.net.Socket?套接字?Socket封裝了TCP通訊協(xié)議,使用它可以基于TCP協(xié)議于遠(yuǎn)端計算機(jī)通訊
?*/
private?Socket?socket;
/**
?*?客戶端的構(gòu)造方法用來初始化客戶端
?*?@throws?IOException
?*/
public?client()?throws?IOException?{
try?{
/**
?*?實例化Socket時,構(gòu)造方法要求傳入兩個參數(shù):?String:指定服務(wù)器的Ip地址?int:指定服務(wù)器開放的端口號
?*/
System.out.println(“正在連接服務(wù)端...“);
long?time?=?System.currentTimeMillis();//?獲取時間
socket?=?new?Socket(“127.0.0.1“?8088);
System.out.println(“連接服務(wù)端成功.“?+?“耗時:“?+?(System.currentTimeMillis()?-?time)?+?“ms“);
}?catch?(UnknownHostException?e)?{
//?記錄日志
throw?e;//?拋異常
}?catch?(IOException?e)?{
//?記錄日志
throw?e;
}
}
/**
?*?輸入昵稱
?*?@throws?IOException?
?*?@throws?UnsupportedEncodingException?
?*/
private?void?inputNickName(Scanner?scanner)?throws?UnsupportedEncodingException?IOException?{
//定義昵稱
String?nickName=null;
//創(chuàng)建輸出流
PrintWriter?pw=new?PrintWriter(new?OutputStreamWriter(socket.getOutputStream()“utf-8“)true);
//創(chuàng)建輸入流
BufferedReader?br=new?BufferedReader(new?InputStreamReader(socket.getInputStream()“utf-8“));
//輸入用戶名,并上傳至服務(wù)器,等待服務(wù)器回應(yīng),若昵稱可用結(jié)束循環(huán),否則通知用戶重新輸入
while(true)?{
System.out.println(“請輸入昵稱:“);
nickName=scanner.nextLine();
if(nickName.trim().equals(““))?{
System.out.println(“昵稱不能為空“);
}else?{
pw.println(nickName);
String?pass=br.readLine();
if(pass!=null&&!pass.equals(“OK“))?{
System.out.println(“昵稱已經(jīng)被占用,請更換...“);
}else?{
System.out.println(“恭喜你!“+nickName+“開始聊天吧!“);
break;
}
}
}
}
/**
?*?啟動客戶端的方法
?*/
public?void?start()?{
try?{
Scanner?scan?=?new?Scanner(System.in);
//首先輸入昵稱
inputNickName(scan);
/**
?*?啟動用于接收服務(wù)器端發(fā)送過來的消息線程
?*/
ServerHandler?handler=new?ServerHandler();
Thread?t=new?Thread(handler);
t.start();
/**
?*?Socket提供了方法:?OutputStream?getOutputStream()
?*?該方法可以獲取一個輸出流,通過該輸出流寫出的數(shù)據(jù)會發(fā)送給遠(yuǎn)端,這里的遠(yuǎn)端就是服務(wù)端
?*/
OutputStream?out?=?socket.getOutputStream();
OutputStreamWriter?osw?=?new?OutputStreamWriter(out?“utf-8“);
PrintWriter?pw?=?new?PrintWriter(osw?true);//?緩沖字符流,自動行刷新
String?message=null;
long?lastSend=System.currentTimeMillis();
while(true)?{
message?=?scan.nextLine();
if(System.currentTimeMillis()-lastSend<1500)?{
System.out.println(“說話太快了“);
}else?{
pw.println(message);
lastSend=System.currentTimeMillis();
}
}
}?catch?(Exception?e)?{
e.printStackTrace();
}finally{
if(socket!=null)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4195??2017-08-12?20:43??java聊天室簡單版\client.java
?????文件???????6648??2017-08-12?20:43??java聊天室簡單版\Server.java
?????目錄??????????0??2017-08-12?20:43??java聊天室簡單版
-----------?---------??----------?-----??----
????????????????10843????????????????????3
評論
共有 條評論