一对一聊天
-
package 一对一用户; -
import java.awt.BorderLayout; -
import java.io.BufferedReader; -
import java.io.IOException; -
import java.io.InputStreamReader; -
import java.io.PrintWriter; -
import java.net.ServerSocket; -
import java.net.Socket; -
import java.util.Vector; -
import javax.swing.JFrame; -
import javax.swing.JScrollPane; -
import javax.swing.JTextArea; -
public class fuwuchuangkou extends JFrame { -
private JTextArea ta_info; -
private ServerSocket server; // 声明ServerSocket对象 -
private Socket socket; // 声明Socket对象socket -
private Vector<Socket> vector = new Vector<Socket>();// 用于存储连接到服务器的客户端套接字对象 -
public void createSocket() { -
try { -
server = new ServerSocket(1978); -
while (true) { -
ta_info.append("等待新客户连接......\n"); -
socket = server.accept();// 创建套接字对象 -
vector.add(socket);// 将套接字对象添加到向量对象中 -
ta_info.append("客户端连接成功。" + socket + "\n"); -
new ServerThread(socket).start();// 创建并启动线程对象 -
} -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} -
class ServerThread extends Thread { -
Socket socket; -
public ServerThread(Socket socket) { -
this.socket = socket; -
} -
public void run() { -
try { -
BufferedReader in = new BufferedReader(new InputStreamReader( -
socket.getInputStream()));// 创建输入流对象 -
while (true) { -
String info = in.readLine();// 读取信息 -
for (Socket s : vector) {// 遍历所有客户端套接字对象 -
if (s != socket) {// 如果不是发送信息的套接字对象 -
PrintWriter out = new PrintWriter(s -
.getOutputStream(), true);// 创建输出流对象 -
out.println(info);// 发送信息 -
out.flush();// 刷新输出缓冲区 -
} -
} -
} -
} catch (IOException e) { -
ta_info.append(socket + "已经退出。\n"); -
vector.remove(socket);// 移除退出的客户端套接字 -
} -
} -
} -
public static void main(String args[]) { -
fuwuchuangkou frame = new fuwuchuangkou(); -
frame.setVisible(true); -
frame.createSocket(); -
} -
/** -
* Create the frame -
*/ -
public fuwuchuangkou() { -
super(); -
setTitle("一对一"); -
setBounds(100, 100, 385, 266); -
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); -
final JScrollPane scrollPane = new JScrollPane(); -
getContentPane().add(scrollPane, BorderLayout.CENTER); -
ta_info = new JTextArea(); -
scrollPane.setViewportView(ta_info); -
} -
}
![]()
-
package 一对一用户; -
import java.awt.BorderLayout; -
import java.awt.Dimension; -
import java.awt.EventQueue; -
import java.awt.event.ActionEvent; -
import java.awt.event.ActionListener; -
import java.io.BufferedReader; -
import java.io.IOException; -
import java.io.InputStreamReader; -
import java.io.PrintWriter; -
import java.net.Socket; -
import java.net.UnknownHostException; -
import javax.swing.JButton; -
import javax.swing.JFrame; -
import javax.swing.JLabel; -
import javax.swing.JPanel; -
import javax.swing.JScrollPane; -
import javax.swing.JTextArea; -
import javax.swing.JTextField; -
public class kehuchuangkou extends JFrame { -
private JTextArea ta_info; -
private JTextField tf_send; -
PrintWriter out;// 声明输出流对象 -
/** -
* Launch the application -
* -
* @param args -
*/ -
public static void main(String args[]) { -
EventQueue.invokeLater(new Runnable() { -
public void run() { -
try { -
kehuchuangkou frame = new kehuchuangkou(); -
frame.setVisible(true); -
frame.createClientSocket(); -
} catch (Exception e) { -
e.printStackTrace(); -
} -
} -
}); -
} -
public void createClientSocket() { -
try { -
Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口 -
out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象 -
new ClientThread(socket).start();// 创建并启动线程对象 -
} catch (UnknownHostException e) { -
e.printStackTrace(); -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} -
class ClientThread extends Thread { -
Socket socket; -
public ClientThread(Socket socket) { -
this.socket = socket; -
} -
public void run() { -
try { -
BufferedReader in = new BufferedReader(new InputStreamReader( -
socket.getInputStream()));// 创建输入流对象 -
while (true) { -
String info = in.readLine();// 读取信息 -
ta_info.append(info + "\n");// 在文本域中显示信息 -
if (info.equals("88")) { -
break;// 结束线程 -
} -
} -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} -
} -
private void send() { -
String info = tf_send.getText();// 获得输入的信息 -
if (info.equals("")) { -
return;// 如果没输入信息则返回,即不发送 -
} -
if (info.equals("88")) { -
System.exit(0);// 如果没输入信息是88,则退出 -
} -
out.println(info);// 发送信息 -
out.flush();// 刷新输出缓冲区 -
tf_send.setText(null);// 清空文本框 -
} -
public kehuchuangkou() { //创建面板 -
super(); -
setTitle("一对一"); -
setBounds(100, 100, 385, 266); -
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); -
final JPanel panel = new JPanel(); -
getContentPane().add(panel, BorderLayout.SOUTH); -
final JLabel label = new JLabel(); -
label.setText("输入聊天内容:"); -
panel.add(label); -
tf_send = new JTextField(); -
tf_send.addActionListener(new ActionListener() { -
public void actionPerformed(final ActionEvent e) { -
send(); -
} -
}); -
tf_send.setPreferredSize(new Dimension(180, 25)); -
panel.add(tf_send); -
final JButton button = new JButton(); -
button.addActionListener(new ActionListener() { -
public void actionPerformed(final ActionEvent e) { -
send(); -
} -
}); -
button.setText("发 送"); -
panel.add(button); -
final JScrollPane scrollPane = new JScrollPane(); -
getContentPane().add(scrollPane, BorderLayout.CENTER); -
ta_info = new JTextArea(); -
scrollPane.setViewportView(ta_info); -
} -
}
![]()
-
package 一对一用户; -
import java.awt.BorderLayout; -
import java.awt.Dimension; -
import java.awt.EventQueue; -
import java.awt.event.ActionEvent; -
import java.awt.event.ActionListener; -
import java.io.BufferedReader; -
import java.io.IOException; -
import java.io.InputStreamReader; -
import java.io.PrintWriter; -
import java.net.Socket; -
import java.net.UnknownHostException; -
import javax.swing.JButton; -
import javax.swing.JFrame; -
import javax.swing.JLabel; -
import javax.swing.JPanel; -
import javax.swing.JScrollPane; -
import javax.swing.JTextArea; -
import javax.swing.JTextField; -
public class kehu1 extends JFrame { -
private JTextArea ta_info; -
private JTextField tf_send; -
PrintWriter out;// 声明输出流对象 -
/** -
* Launch the application -
* -
* @param args -
*/ -
public static void main(String args[]) { -
EventQueue.invokeLater(new Runnable() { -
public void run() { -
try { -
kehuchuangkou frame = new kehuchuangkou(); -
frame.setVisible(true); -
frame.createClientSocket(); -
} catch (Exception e) { -
e.printStackTrace(); -
} -
} -
}); -
} -
public void createClientSocket() { -
try { -
Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口 -
out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象 -
new ClientThread(socket).start();// 创建并启动线程对象 -
} catch (UnknownHostException e) { -
e.printStackTrace(); -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} -
class ClientThread extends Thread { -
Socket socket; -
public ClientThread(Socket socket) { -
this.socket = socket; -
} -
public void run() { -
try { -
BufferedReader in = new BufferedReader(new InputStreamReader( -
socket.getInputStream()));// 创建输入流对象 -
while (true) { -
String info = in.readLine();// 读取信息 -
ta_info.append(info + "\n");// 在文本域中显示信息 -
if (info.equals("88")) { -
break;// 结束线程 -
} -
} -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} -
} -
private void send() { -
String info = tf_send.getText();// 获得输入的信息 -
if (info.equals("")) { -
return;// 如果没输入信息则返回,即不发送 -
} -
if (info.equals("88")) { -
System.exit(0);// 如果没输入信息是88,则退出 -
} -
out.println(info);// 发送信息 -
out.flush();// 刷新输出缓冲区 -
tf_send.setText(null);// 清空文本框 -
} -
public kehu1() { //创建面板 -
super(); -
setTitle("一对一"); -
setBounds(100, 100, 385, 266); -
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); -
final JPanel panel = new JPanel(); -
getContentPane().add(panel, BorderLayout.SOUTH); -
final JLabel label = new JLabel(); -
label.setText("输入聊天内容:"); -
panel.add(label); -
tf_send = new JTextField(); -
tf_send.addActionListener(new ActionListener() { -
public void actionPerformed(final ActionEvent e) { -
send(); -
} -
}); -
tf_send.setPreferredSize(new Dimension(180, 25)); -
panel.add(tf_send); -
final JButton button = new JButton(); -
button.addActionListener(new ActionListener() { -
public void actionPerformed(final ActionEvent e) { -
send(); -
} -
}); -
button.setText("发 送"); -
panel.add(button); -
final JScrollPane scrollPane = new JScrollPane(); -
getContentPane().add(scrollPane, BorderLayout.CENTER); -
ta_info = new JTextArea(); -
scrollPane.setViewportView(ta_info); -
} -
}
![]()
运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!