• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: Java
  • 标签:

资源简介

项目不是很大,对于初学者比较费劲,首先用到的技术有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


评论

共有 条评论