资源简介
简单多客户端聊天GUI界面,服务器转发消息,适用于课程作业
代码片段和文件信息
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.Jframe;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Client {
public static int i=0;//想聊天的线程号
public static void main(String[] args) throws ClassNotFoundException {
try {
Socket client=new Socket(“localhost“8888);//本地ip创建socket
BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));//缓冲输入流读取当前的线程号
int n=Integer.parseInt(br.readLine());
SwingTest swingtest=new SwingTest();//实例化一个面板对象
swingtest.jt2.setText(“当前线程号为“+n+“ 请先在上方输入你想聊天的线程号?\n“);//把这条消息送到当前文本版框中
System.out.println(“当前线程号为“+n+“ 请先在上方输入你想聊天的线程号?\n“);
receiveMessage re=new receiveMessage(clientswingtest); //这个线程用来一直从服务器接收消息
re.start(); //因为存在一个while的读写操作,所以必须开启线程操作
PrintWriter pr=new PrintWriter(client.getOutputStream());//输出流
System.out.println(“再在下方输入聊天内容,exit结束“);
//输出流,发消息给服务器中转
swingtest.jt2.append(“再在下方输入聊天内容,exit结束\n\n“);//文本2中,追加提示
swingtest.b1.addActionListener(new ActionListener() { //问题
public void actionPerformed(ActionEvent e) {
try {
String str1=swingtest.jt1.getText().toString();
pr.println(str1);
pr.flush();
swingtest.jt2.append(“你想要与 “+str1+“号客户端交流\n“);
}catch (Exception e1) {
// TODO: handle exception
}
}
});
swingtest.b3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e2) {
try {
String str3=swingtest.jt3.getText().toString();
pr.println(“线程“+n+“:“+str3);
pr.flush();
swingtest.jt2.append(“线程“+n+“: “+str3+“\n“);
swingtest.jt3.setText(““);
}catch (Exception e3) {
// TODO: handle exception
}
}
});
} catch (IOException e) {}
}
}
class SwingTest extends Jframe {
Jframe jf=null;
Container container=null;
JPanel jp1jp2jp3;
JTextField jt1jt3;
JTextArea jt2;
Button b1b3;
public SwingTest()
{
jf=new Jframe(“即时通信“);
container=jf.getContentPane();
container.setLayout(new BorderLayout());//设置为边界布局管理器
jp1=new JPanel(new FlowLayout(155));//居中对齐,组件间间隔5
jp2=new JPanel(new FlowLayout(155));//居中对齐,组件间间隔5
jp3=new JPanel(new FlowLayout(155));//居中对齐,组件间间隔5
jt1=new JTextField(22);//输入连接线程号的文本,放在上边,这里的参数表示这个输入框的长度为10列。
jt2=new JTextArea(2227);//展示来往消息的文
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1006 2018-05-06 11:41 ClientThread.java
文件 1289 2018-05-04 18:50 Server.java
文件 761 2018-05-04 18:50 receiveMessage.java
文件 1081 2018-05-04 16:44 user.java
文件 3756 2018-05-06 11:46 Client.java
评论
共有 条评论