1、创建一个服务端、和客户端的两个类
服务端:
a、界面 一个文本域、一个本本框、一个滚动条、一个按钮、一个面板
文本域设置为不可编辑
按钮加一个监听器、文本框加一个键盘监听器
b、创建ServerSocket类->等待
package www.mdxy;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;
public class TastServer extends JFrame implements ActionListener, KeyListener {
public static void main(String[] args) {
new TastServer();
}
//1、一个按钮
private JButton jb;
//2、一个文本框
private JTextField jtf;
//3、一个文本域
private JTextArea jta;
//4、一个面板
private JPanel jp;
//滚动条
private JScrollBar js;
//端口号
private static int prot;
//输出流
BufferedWriter bw;
static {
Properties properties = new Properties();
try {
properties.load(new FileReader("src/chat.properties"));
prot= Integer.parseInt(properties.getProperty("Serverprot"));
} catch (IOException e) {
e.printStackTrace();
}
}
public TastServer(){
jb=new JButton("发送");
//加一个监听器
jb.addActionListener(this);
jtf=new JTextField(15);
//加一个键盘监听器
jtf.addKeyListener((KeyListener) this);
jta=new JTextArea();
jta.setEditable(false);
jp=new JPanel();
js=new JScrollBar();
js.add(jta);
jp.add(jtf);
jp.add(jb);
this.add(jta, BorderLayout.CENTER);
this.add(jp,BorderLayout.SOUTH);
//关闭
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//是否可见
this.setVisible(true);
//大小
this.setBounds(300,300,300,300);
//标题
this.setTitle("聊天室");
/******** 开始 ***********/
//1、建立serverSocket对象
try {
ServerSocket serverSocket = new ServerSocket(prot);
//2、等待连接
Socket s = serverSocket.accept();
//3、获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//4、获取输出流
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line=null;
while ((line=br.readLine())!=null){
jta.append(line+System.lineSeparator());
}
//5、关闭资源
bw.close();
br.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
/******** 结束 ***********/
}
public void Client(){
//获取文本框的文字
String text = jtf.getText();
//文字换行
text="小明 : "+text;
//自己显示
jta.append(text+System.lineSeparator());
//发送
try {
bw.write(text);
bw.newLine();
bw.flush();
//清空
jtf.setText("");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
Client();
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ENTER){
Client();
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
}
连接->获取输入流->获取输出流->关闭资源
各户端
a、界面和服务端一样
b、用端口来和服务端连接(端口号一样)
创建一个Socket()类和服务端连接 IP 地址和 端口号->获取输入流->获取输出流->关闭资源
package www.mdxy;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.net.Socket;
import java.util.Properties;
public class TastClient extends JFrame implements ActionListener, KeyListener {
public static void main(String[] args) {
new TastClient();
}
//1、一个按钮
private JButton jb;
//2、一个文本框
private JTextField jtf;
//3、一个文本域
private JTextArea jta;
//4、一个面板
private JPanel jp;
//滚动条
private JScrollBar js;
//端口号
private static int prot;
//ip
private static String ip;
//输出流
BufferedWriter bw;
static {
Properties properties = new Properties();
try {
properties.load(new FileReader("src/chat.properties"));
prot= Integer.parseInt(properties.getProperty("Serverprot"));
ip=properties.getProperty("ClientIP");
} catch (IOException e) {
e.printStackTrace();
}
}
public TastClient() {
jb = new JButton("发送");
//加一个监听器
jb.addActionListener(this);
jtf = new JTextField(15);
//加一个键盘监听器
jtf.addKeyListener((KeyListener) this);
jta = new JTextArea();
jta.setEditable(false);
jp = new JPanel();
js = new JScrollBar();
js.add(jta);
jp.add(jtf);
jp.add(jb);
this.add(jta, BorderLayout.CENTER);
this.add(jp, BorderLayout.SOUTH);
//关闭
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//是否可见
this.setVisible(true);
//大小
this.setBounds(300, 300, 300, 300);
//标题
this.setTitle("聊天室");
/******** 开始 ********/
//建立socket连接
try {
Socket socket = new Socket(ip, prot);
//获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取输出流
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String line=null;
while ((line=br.readLine())!=null){
jta.append(line+ System.lineSeparator());
}
//关闭资源
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
/******** 结束 ********/
}
public void Client () {
//获取文本框的文字
String text = jtf.getText();
//文字换行
text = "李四 : " + text;
//自己显示
jta.append(text + System.lineSeparator());
//发送
try {
bw.write(text);
bw.newLine();
bw.flush();
//清空
jtf.setText("");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
Client();
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ENTER){
Client();
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
}
还有配置文件
有IP和端口号
Serverprot=8888
Clientprot=8888
ClientIP=127.0.0.1
版权声明:本文为m0_69007223原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。