界面
package chat;
//我的聊天工具
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.*;
public class ChatAWT extends javax.swing.JFrame {
private JLabel jLabel1;
private JLabel jLabel2;
private JLabel jLabel3;
private JButton jButton1;
private JButton jButton2;
private JButton jButton3;
public JTextArea jTextArea2;
public JTextArea jTextArea1;
private JScrollPane jScrollPane1;
private JScrollPane jScrollPane2;
private Socket sk; //Socket对象
private String Text=""; //接收聊天记录public ChatAWT(Socket sk) throws Exception {
super();
initGUI();
this.sk=sk; } private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
getContentPane().setBackground(new java.awt.Color(83,169,255));
{
jLabel1 = new JLabel();
getContentPane().add(jLabel1);
jLabel1.setText("我的聊天室");
jLabel1.setBounds(118, 12, 106, 26);
jLabel1.setFont(new java.awt.Font("新宋体",1,20));
}
{
jScrollPane1 = new JScrollPane();
getContentPane().add(jScrollPane1, "Center");
jScrollPane1.setBounds(45, 44, 262, 149);
{
jTextArea1 = new JTextArea();
jScrollPane1.setViewportView(jTextArea1);
jTextArea1.setBackground(new java.awt.Color(191,251,214));
jTextArea1.setEditable(false);
}
}
{
jScrollPane2 = new JScrollPane();
getContentPane().add(jScrollPane2, "Center");
jScrollPane2.setBounds(45, 215, 262, 109);
{
jTextArea2 = new JTextArea();
jScrollPane2.setViewportView(jTextArea2);
}
}
{
jButton1 = new JButton();
getContentPane().add(jButton1);
jButton1.setText("发送");
jButton1.setBounds(245, 330, 62, 24);
jButton1.addActionListener(new Chat_Send(this));
}
{
jButton2 = new JButton();
getContentPane().add(jButton2);
jButton2.setText("清屏");
jButton2.setBounds(351, 169, 92, 24);
jButton2.addActionListener(new Chat_eliminate(this));
}
{
jButton3 = new JButton();
getContentPane().add(jButton3);
jButton3.setText("聊天记录");
jButton3.setBounds(351, 206, 92, 24);
}
{
jLabel2 = new JLabel();
getContentPane().add(jLabel2);
jLabel2.setText("客户B");
jLabel2.setBounds(339, 62, 112, 73);
jLabel2.setFont(new java.awt.Font("华文行楷",1,36));
}
{
jLabel3 = new JLabel();
getContentPane().add(jLabel3);
jLabel3.setText("客户A");
jLabel3.setFont(new java.awt.Font("华文行楷",1,36));
jLabel3.setBounds(339, 257, 112, 73);
}
pack();
this.setSize(500, 400);
this.setLocationRelativeTo(null);
this.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
} } //发送键——执行的操作
public void send() throws Exception{
//思路:把从输入框获得内容,放到聊天记录框,并把它写入到输出流中
String str=jTextArea2.getText()+"\n";
//jTextArea1.append("客户端:"+str); //发送完的内容放到接收文本框
OutputStream out=sk.getOutputStream();
PrintStream print=new PrintStream(out,true);
print.print(str);
jTextArea2.setText(""); //发送完之后输入框置空
} //清屏键——执行的操作
public void eliminate (){
jTextArea1.setText("");
} //实现接收客户端发来的数据
public void receive(){ try {
//读取客户端发来的数据
InputStream in=sk.getInputStream();
//把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String str="";
while((str=reader.readLine())!=null){
//把读到的信息放到聊天记录框中
jTextArea1.append("服务端:");
System.out.println("服务端:");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//发送键——实现监听
class Chat_Send implements ActionListener{
private ChatAWT chat;
public Chat_Send(ChatAWT chat) {
super();
this.chat = chat;
}
public void actionPerformed(ActionEvent e) {
try {
chat.send();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
//清屏键——实现监听
class Chat_eliminate implements ActionListener{
private ChatAWT chat;
public Chat_eliminate(ChatAWT chat) {
super();
this.chat = chat;
}
public void actionPerformed(ActionEvent e) {
chat.eliminate();
}
}
客户端
package chat;
import java.io.*;
import java.net.*;
public class Chat {
public static void main(String[] args) throws Exception {
Socket sk = new Socket("127.0.0.1", 20139);
ChatAWT chat = new ChatAWT(sk);
ChatThread t = new ChatThread(chat, sk);
t.start();
}
}
客户端线程
package chat;
import java.io.*;
import java.net.Socket;
public class ChatThread extends Thread {
private ChatAWT chat;
private Socket sk; //构建有参构造(目的:和界面)
public ChatThread(ChatAWT chat, Socket sk) {
super();
this.chat = chat;
this.sk = sk;
} public void run() {
super.run();
try {
while(true){
System.out.println("线程启动了");
//读取客户端发来的数据
InputStream in=sk.getInputStream(); System.out.println(sk.getInetAddress());
//把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
chat.jTextArea1.append("服务端:"+reader.readLine());
System.out.println("服务端:");
} } catch (IOException e) {
e.printStackTrace();
}
} }
服务端
package chat;
import java.io.*;
import java.net.*;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
//服务端
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("服务器已启动");
//创建serversocket对象
ServerSocket ss=new ServerSocket(20139); //进行监听,获得相应的客户端socket对象、
Socket sk=ss.accept(); //读取客户端发来输出流数据
InputStream in=sk.getInputStream();
OutputStream out=sk.getOutputStream();
//把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String msg="";
while((msg=reader.readLine())!=null){
System.out.println("客户端:"+msg); //把得到的信息又返回给客户端
PrintStream print=new PrintStream(out,true); //会自动刷新和写如换行符'\n'
print.print("我发出去了((()))");
System.out.println("我发出去了");
}
}
}
服务端线程
package chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class ServerThread extends Thread {
private Socket sk; //有参构造(目的:和主线程产生关系)
public ServerThread(Socket sk) {
super();
this.sk = sk;
}
}socket图形
package chat;
//我的聊天工具
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.*;
public class ChatAWT extends javax.swing.JFrame {
private JLabel jLabel1;
private JLabel jLabel2;
private JLabel jLabel3;
private JButton jButton1;
private JButton jButton2;
private JButton jButton3;
public JTextArea jTextArea2;
public JTextArea jTextArea1;
private JScrollPane jScrollPane1;
private JScrollPane jScrollPane2;
private Socket sk; //Socket对象
private String Text=""; //接收聊天记录public ChatAWT(Socket sk) throws Exception {
super();
initGUI();
this.sk=sk; } private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
getContentPane().setBackground(new java.awt.Color(83,169,255));
{
jLabel1 = new JLabel();
getContentPane().add(jLabel1);
jLabel1.setText("我的聊天室");
jLabel1.setBounds(118, 12, 106, 26);
jLabel1.setFont(new java.awt.Font("新宋体",1,20));
}
{
jScrollPane1 = new JScrollPane();
getContentPane().add(jScrollPane1, "Center");
jScrollPane1.setBounds(45, 44, 262, 149);
{
jTextArea1 = new JTextArea();
jScrollPane1.setViewportView(jTextArea1);
jTextArea1.setBackground(new java.awt.Color(191,251,214));
jTextArea1.setEditable(false);
}
}
{
jScrollPane2 = new JScrollPane();
getContentPane().add(jScrollPane2, "Center");
jScrollPane2.setBounds(45, 215, 262, 109);
{
jTextArea2 = new JTextArea();
jScrollPane2.setViewportView(jTextArea2);
}
}
{
jButton1 = new JButton();
getContentPane().add(jButton1);
jButton1.setText("发送");
jButton1.setBounds(245, 330, 62, 24);
jButton1.addActionListener(new Chat_Send(this));
}
{
jButton2 = new JButton();
getContentPane().add(jButton2);
jButton2.setText("清屏");
jButton2.setBounds(351, 169, 92, 24);
jButton2.addActionListener(new Chat_eliminate(this));
}
{
jButton3 = new JButton();
getContentPane().add(jButton3);
jButton3.setText("聊天记录");
jButton3.setBounds(351, 206, 92, 24);
}
{
jLabel2 = new JLabel();
getContentPane().add(jLabel2);
jLabel2.setText("客户B");
jLabel2.setBounds(339, 62, 112, 73);
jLabel2.setFont(new java.awt.Font("华文行楷",1,36));
}
{
jLabel3 = new JLabel();
getContentPane().add(jLabel3);
jLabel3.setText("客户A");
jLabel3.setFont(new java.awt.Font("华文行楷",1,36));
jLabel3.setBounds(339, 257, 112, 73);
}
pack();
this.setSize(500, 400);
this.setLocationRelativeTo(null);
this.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
} } //发送键——执行的操作
public void send() throws Exception{
//思路:把从输入框获得内容,放到聊天记录框,并把它写入到输出流中
String str=jTextArea2.getText()+"\n";
//jTextArea1.append("客户端:"+str); //发送完的内容放到接收文本框
OutputStream out=sk.getOutputStream();
PrintStream print=new PrintStream(out,true);
print.print(str);
jTextArea2.setText(""); //发送完之后输入框置空
} //清屏键——执行的操作
public void eliminate (){
jTextArea1.setText("");
} //实现接收客户端发来的数据
public void receive(){ try {
//读取客户端发来的数据
InputStream in=sk.getInputStream();
//把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String str="";
while((str=reader.readLine())!=null){
//把读到的信息放到聊天记录框中
jTextArea1.append("服务端:");
System.out.println("服务端:");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//发送键——实现监听
class Chat_Send implements ActionListener{
private ChatAWT chat;
public Chat_Send(ChatAWT chat) {
super();
this.chat = chat;
}
public void actionPerformed(ActionEvent e) {
try {
chat.send();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
//清屏键——实现监听
class Chat_eliminate implements ActionListener{
private ChatAWT chat;
public Chat_eliminate(ChatAWT chat) {
super();
this.chat = chat;
}
public void actionPerformed(ActionEvent e) {
chat.eliminate();
}
}
客户端
package chat;
import java.io.*;
import java.net.*;
public class Chat {
public static void main(String[] args) throws Exception {
Socket sk = new Socket("127.0.0.1", 20139);
ChatAWT chat = new ChatAWT(sk);
ChatThread t = new ChatThread(chat, sk);
t.start();
}
}
客户端线程
package chat;
import java.io.*;
import java.net.Socket;
public class ChatThread extends Thread {
private ChatAWT chat;
private Socket sk; //构建有参构造(目的:和界面)
public ChatThread(ChatAWT chat, Socket sk) {
super();
this.chat = chat;
this.sk = sk;
} public void run() {
super.run();
try {
while(true){
System.out.println("线程启动了");
//读取客户端发来的数据
InputStream in=sk.getInputStream(); System.out.println(sk.getInetAddress());
//把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
chat.jTextArea1.append("服务端:"+reader.readLine());
System.out.println("服务端:");
} } catch (IOException e) {
e.printStackTrace();
}
} }
服务端
package chat;
import java.io.*;
import java.net.*;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
//服务端
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("服务器已启动");
//创建serversocket对象
ServerSocket ss=new ServerSocket(20139); //进行监听,获得相应的客户端socket对象、
Socket sk=ss.accept(); //读取客户端发来输出流数据
InputStream in=sk.getInputStream();
OutputStream out=sk.getOutputStream();
//把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String msg="";
while((msg=reader.readLine())!=null){
System.out.println("客户端:"+msg); //把得到的信息又返回给客户端
PrintStream print=new PrintStream(out,true); //会自动刷新和写如换行符'\n'
print.print("我发出去了((()))");
System.out.println("我发出去了");
}
}
}
服务端线程
package chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class ServerThread extends Thread {
private Socket sk; //有参构造(目的:和主线程产生关系)
public ServerThread(Socket sk) {
super();
this.sk = sk;
}
}socket图形
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货