资源简介
项目不是很大,对于初学者比较费劲,首先用到的技术有java文件操作,字符输出输入流,多线程,TCP通信等基础知识,很好的实战小项目,里面含有大量注释帮助理解...
代码片段和文件信息
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通讯协议,使用它可以基于TCP协议于远端计算机通讯
*/
private Socket socket;
/**
* 客户端的构造方法用来初始化客户端
* @throws IOException
*/
public client() throws IOException {
try {
/**
* 实例化Socket时,构造方法要求传入两个参数: String:指定服务器的Ip地址 int:指定服务器开放的端口号
*/
System.out.println(“正在连接服务端...“);
long time = System.currentTimeMillis();// 获取时间
socket = new Socket(“127.0.0.1“ 8088);
System.out.println(“连接服务端成功.“ + “耗时:“ + (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;
//创建输出流
PrintWriter pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()“utf-8“)true);
//创建输入流
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()“utf-8“));
//输入用户名,并上传至服务器,等待服务器回应,若昵称可用结束循环,否则通知用户重新输入
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(“昵称已经被占用,请更换...“);
}else {
System.out.println(“恭喜你!“+nickName+“开始聊天吧!“);
break;
}
}
}
}
/**
* 启动客户端的方法
*/
public void start() {
try {
Scanner scan = new Scanner(System.in);
//首先输入昵称
inputNickName(scan);
/**
* 启动用于接收服务器端发送过来的消息线程
*/
ServerHandler handler=new ServerHandler();
Thread t=new Thread(handler);
t.start();
/**
* Socket提供了方法: OutputStream getOutputStream()
* 该方法可以获取一个输出流,通过该输出流写出的数据会发送给远端,这里的远端就是服务端
*/
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
评论
共有 条评论