为java聊天室代码加详细注释 , 并说明设计思路 。好的加100分 。import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;//引入包 。
public class ChatClient {
public static void main(String[] args) {
ChatClient cc = new ChatClient();
cc.receive();
}
JTextField jtf; // 文本条
JTextArea jta; //文本域 。
Socket s; //客户端
PrintWriter out; //输出流
BufferedReader in; //输入流
public ChatClient() {
JFrame frame = new JFrame("ChatClient");//窗口
frame.setSize(400, 300); //大小
jta = new JTextArea(); //文本域
jta.setEditable(false); //不可编辑
jtf = new JTextField();//文件条
jtf.addActionListener(new ActionListener() { //添加监听 。
public void actionPerformed(ActionEvent arg0) {
send(); //调用send()方法
}
});
frame.getContentPane().add(new JScrollPane(jta)); //添加滚动条
frame.getContentPane().add(jtf, "South"); //添加文本条
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口 。
frame.setVisible(true); //可显示java的聊天室项目代码的 。
try {
s = new Socket("127.0.0.1", 9000); //连接服务端 socket("主机名"java的聊天室项目代码,端口号);
in = new BufferedReader(new InputStreamReader(s.getInputStream())); //建立输入流
out = new PrintWriter(s.getOutputStream());//输出流
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void receive() { //接受服务端发来别java的聊天室项目代码的客户端的信息 。
while (true) {
try {
String text = in.readLine(); //读一行
this.jta.append(text + "\n"); //jta 添加上读入的 。
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
}
}
public void send() { //发送消息
String text = this.jtf.getText(); //得到你输入的消息
this.jtf.setText(""); //在文本域中显示你输入的消息 。
out.println(text); //打印出 。
out.flush(); //清空
}
}
Server端
import java.net.*;
import java.io.*;
import java.util.*;//引入包
public class ChatServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(9000); //建立服务端,端口号为9000
List list = new ArrayList(); //创建个List集合 。
while (true) {
Socket s = ss.accept(); //等待客户端的请求 。
list.add(s); //把每一个client都add到集合中去 。
Thread t = new ServerThread(s, list); //线程 。
t.start(); //启动 。
}
}
}
class ServerThread extends Thread {
Socket s;
List list;
BufferedReader in;
PrintWriter out;
public ServerThread(Socket s, List list) { //构造 。传入socket和list 。
this.s = s;
this.list = list;
try {
in = new BufferedReader(new InputStreamReader(s.getInputStream())); //输入流
out = new PrintWriter(s.getOutputStream()); //输出流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() { //必须实现其run()方法 。
while (true) {
try {
String str = in.readLine(); //得到client端的message 。
if (str == null) //如果没有消息就返回 。
return;
Iterator it = list.iterator(); //遍历list 。
while (it.hasNext()) { //如果list有下一个
Socket socket = (Socket) (it.next()); //因为list中都是存的socket
推荐阅读
- 天骄直播运营,元气骑士雇佣新随从扣血
- 微信视频号变了,微信视频号变形
- 任天堂游戏机射击游戏下载,任天堂好玩的射击游戏
- gis数据库约束条件moc,数据库约束条件m,o,c
- c语言时间函数用法 c中时间函数怎么用
- js的&标签,js设置标签属性值
- 陈瑶唱歌视频软件免费安卓,陈瑶唱歌好听
- tiktok无人直播工具知乎,tiktok怎么无人直播
- vb.netddc属性 vbnet ado