• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: 其他
  • 标签: socket  

资源简介

没有可视化窗口,基于控制台输入的的聊天室,使用socket套接字和多线程完成在线聊天功能,支持私聊和群聊,功能简单请见谅。

资源截图

代码片段和文件信息

package jdk.java.net.socket.chat;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
/**
 * 
 * 客户端思路:
 * 1.客户端与服务端建立连接
 *   1)首先需要注册才能建立聊天功能
 * 
 * 2.需要一个数据发送线程和数据接收线程
 *   1)数据发送线程监控控制台输入
 *   2)数据接收线程用户接收其它用户和服务端发送过来的消息
 * 
 * @author ni.tf
 * 2017-9-5
 */
public class ClientChat {

/**
 * 同意字符集
 */
public static final String CHARSET = “UTF-8“;

/**
 * 运行状态
 */
public static boolean isRunning = true;

private BufferedWriter writer;
private BufferedReader reader;
private BufferedReader in;

private Socket socket;

/**
 * @param args
 */
public static void main(String[] args) {
new ClientChat().startup();
}


public ClientChat() {
try {
socket = new Socket(“127.0.0.1“ 8088);
writer = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream() CHARSET));

reader = new BufferedReader(new InputStreamReader(
socket.getInputStream() CHARSET));

in = new BufferedReader(new InputStreamReader(System.in CHARSET));

} catch (UnsupportedEncodingException e) {
isRunning = false;
e.printStackTrace();
SocketUtil.close(writer reader in);
} catch (IOException e) {
isRunning = false;
e.printStackTrace();
SocketUtil.close(writer reader in);
}
}

/**
 * 启动数据发送和接收线程
 */
public void startup(){
Sender sender = new Sender();
new Thread(sender).start();

Receiver receiver = new Receiver();
new Thread(receiver).start();
}

/**
 * 发送线程
 * 1.获取用户控制台输入信息
 * 2.发送信息给服务端
 * @author ni.tf
 * 2017-9-1
 */
class Sender implements Runnable {
@Override
public void run() {
while(isRunning){
try {
String info = in.readLine();
if(info != null && !““.equals(info)){
writer.write(info);
writer.newLine();
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
isRunning = false;
e.printStackTrace();
SocketUtil.close(reader writer);
}
}
}
}

/**
 * 接收线程
 * @author ni.tf
 * 2017-9-1
 */
class Receiver implements Runnable {
@Override
public void run() {
while(isRunning){
try {
String info = reader.readLine();
System.out.println(info);
} catch (IOException e) {
e.printStackTrace();
isRunning = false;
e.printStackTrace();
SocketUtil.close(reader);
}
}
}
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2894  2017-09-05 15:27  chat\ClientChat.java
     文件        7290  2017-09-05 15:22  chat\ServerChat.java
     文件         395  2017-09-01 17:04  chat\SocketUtil.java
     目录           0  2017-09-05 15:47  chat\

评论

共有 条评论