第十五天 简单聊天
来源:互联网 发布:套利程序化交易软件 编辑:程序博客网 时间:2024/05/16 12:18
服务器与单客户端聊天
package com.java.test1;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import com.java.test.MyServerRead;import javax.swing.DefaultListModel;import javax.swing.JButton;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.awt.event.ActionEvent;import javax.swing.JTextArea;import javax.swing.JList;public class Server extends JFrame { private JPanel contentPane; private JTextArea textArea; private JList list; private DefaultListModel<String> model; private ArrayList<Socket> sockets; public boolean isRunning=true; private JButton button; public boolean isRunning() { return isRunning; } public void setRunning(boolean isRunning) { this.isRunning = isRunning; } /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Server frame = new Server(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Server() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btnNewButton = new JButton("发送"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { model.addElement(textArea.getText()); write(); } }); btnNewButton.setBounds(283, 189, 127, 52); contentPane.add(btnNewButton); textArea = new JTextArea(); textArea.setBounds(10, 189, 250, 52); contentPane.add(textArea); button = new JButton("启动服务器"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { isRunning=true; new Thread(new Runnable(){ public void run(){ try { ServerSocket server = new ServerSocket(8080); System.out.println("服务器启动"); sockets=new ArrayList<>(); while(isRunning){ Socket socket = server.accept(); sockets.add(socket); Thread t=new Thread(new ServerRead(Server.this,socket)); t.start(); System.out.println("有客户端连接"); } } catch (IOException e1) { e1.printStackTrace(); } } }).start(); } }); button.setBounds(283, 32, 127, 33); contentPane.add(button); list = new JList(); model=new DefaultListModel<>(); list.setModel(model); list.setBounds(10, 10, 250, 162); contentPane.add(list); } public void read(Socket socket) { if(socket.isConnected()){ try { InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); model.addElement(socket.getInetAddress().getHostAddress()+": "+line); System.out.println("服务器接收到的消息:"+line); } catch (IOException e) { e.printStackTrace(); } }else{ sockets.remove(socket); } } public void write(){ try { for(Socket socket:sockets){ OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); String words=textArea.getText(); System.out.println("服务器发送信息"); bw.write("服务器说: "+words+"\n"); bw.flush(); } textArea.setText(""); } catch (IOException e) { e.printStackTrace(); } }}
package com.java.test1;import java.awt.EventQueue;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;import java.net.UnknownHostException;import javax.swing.DefaultListModel;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.JTextArea;import javax.swing.JList;public class Client extends JFrame { private JPanel contentPane; private Socket socket; private JTextArea textArea; private JList list; DefaultListModel<String> model; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Client frame = new Client(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Client() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btnNewButton = new JButton("发送"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { write(); } }); btnNewButton.setBounds(305, 200, 99, 36); contentPane.add(btnNewButton); JButton btnNewButton_1 = new JButton("连接服务器"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { System.out.println("连接服务器"); socket =new Socket("192.168.0.85",8080); System.out.println("服务器连接成功"); Thread t=new Thread(new ClientRead(Client.this)); t.start(); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } }); btnNewButton_1.setBounds(264, 68, 160, 60); contentPane.add(btnNewButton_1); textArea = new JTextArea(); textArea.setBounds(10, 207, 228, 45); contentPane.add(textArea); list = new JList(); list.setBounds(10, 22, 228, 173); model=new DefaultListModel<>(); list.setModel(model); contentPane.add(list); } public void read() { try { InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); model.addElement(line); System.out.println(line); } catch (IOException e) { e.printStackTrace(); } } public void write(){ try { OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); String words=textArea.getText(); bw.write(words+"\n"); model.addElement("客户端说: "+words); textArea.setText(""); bw.flush(); } catch (IOException e) { e.printStackTrace(); } }}
package com.java.test1;public class ClientRead implements Runnable { private Client client; public ClientRead(Client client){ this.client=client; } @Override public void run() { while(true){ client.read(); } }}
package com.java.test1;import java.net.Socket;public class ServerRead implements Runnable{ private Server server; private Socket socket; public ServerRead(Server server,Socket socket){ this.server=server; this.socket=socket; } @Override public void run() { while(server.isRunning){ server.read(socket); } }}
一客户端通过服务器与指定客户端聊天
package com.java.test;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import com.java.test.MyServerRead;import net.sf.json.JSONObject;import javax.swing.DefaultListModel;import javax.swing.JButton;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Set;import java.awt.event.ActionEvent;import javax.swing.JTextArea;import javax.swing.JList;public class StartServer extends JFrame { private JPanel contentPane; private JTextArea textArea; private JList list; private DefaultListModel<String> model; private HashMap<String,Socket> sockets; private Socket socket; public boolean isRunning=true; private JButton button; public boolean isRunning() { return isRunning; } public void setRunning(boolean isRunning) { this.isRunning = isRunning; } /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { StartServer frame = new StartServer(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public StartServer() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btnNewButton = new JButton("发送"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { model.addElement(textArea.getText()); } }); btnNewButton.setBounds(283, 189, 127, 52); contentPane.add(btnNewButton); textArea = new JTextArea(); textArea.setBounds(10, 189, 250, 52); contentPane.add(textArea); button = new JButton("启动服务器"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { isRunning=true; new Thread(new Runnable(){ public void run(){ try { ServerSocket server = new ServerSocket(8080); sockets=new HashMap<>(); System.out.println("服务器启动"); while(isRunning){ socket = server.accept(); sockets.put(socket.getInetAddress().getHostAddress(),socket); Thread t=new Thread(new MyServerRead(StartServer.this,socket)); t.start(); System.out.println("有客户端连接"); } } catch (IOException e1) { e1.printStackTrace(); } } }).start(); } }); button.setBounds(283, 32, 127, 33); contentPane.add(button); list = new JList(); model=new DefaultListModel<>(); list.setModel(model); list.setBounds(10, 10, 250, 162); contentPane.add(list); } public void readLine(String line){ JSONObject obj=JSONObject.fromObject(line); String type=obj.getString("type"); if(type.equals(("toSingle"))){ String time=obj.getString("time"); String to=obj.getString("to"); String from=obj.getString("from"); String msg=obj.getString("message"); Socket toSocket=sockets.get(to); System.out.println(toSocket.getInetAddress().getHostAddress()); try { OutputStream os = toSocket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); bw.write(msg+"\n"); bw.flush(); } catch (IOException e) { e.printStackTrace(); } } model.addElement(line); } public void read(Socket socket) { if(socket.isConnected()){ try { InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); model.addElement(socket.getInetAddress().getHostAddress()+": "+line); System.out.println("服务器接收到的消息:"+line); } catch (IOException e) { e.printStackTrace(); } }else{ sockets.remove(socket); } } public void write(String msg){ try { Set<String> keys=sockets.keySet(); Iterator<String> it=keys.iterator(); while(it.hasNext()){ socket=sockets.get(it.next()); OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); System.out.println("服务器发送信息"); bw.write(msg+"\n"); bw.flush(); } textArea.setText(""); } catch (IOException e) { e.printStackTrace(); } }}
package com.java.test;import java.awt.EventQueue;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;import java.net.UnknownHostException;import java.util.Date;import javax.swing.DefaultListModel;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import net.sf.json.JSONObject;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.JTextArea;import javax.swing.JList;import javax.swing.JTextField;public class MyClient extends JFrame { private JPanel contentPane; private Socket socket; private JTextArea textArea; private JList list; DefaultListModel<String> model; private JTextField textField; private JTextField textField_1; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MyClient frame = new MyClient(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public MyClient() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btnNewButton = new JButton("发送"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String msg=creatJSON(); write(msg); } }); btnNewButton.setBounds(305, 200, 99, 36); contentPane.add(btnNewButton); JButton btnNewButton_1 = new JButton("连接服务器"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { System.out.println("连接服务器"); socket =new Socket("192.168.0.85",8080); System.out.println("服务器连接成功"); Thread t=new Thread(new MyClientRead(MyClient.this)); t.start(); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } }); btnNewButton_1.setBounds(264, 68, 160, 60); contentPane.add(btnNewButton_1); textArea = new JTextArea(); textArea.setBounds(10, 207, 228, 45); contentPane.add(textArea); list = new JList(); list.setBounds(10, 22, 228, 173); model=new DefaultListModel<>(); list.setModel(model); contentPane.add(list); textField_1 = new JTextField(); textField_1.setBounds(248, 138, 176, 36); contentPane.add(textField_1); textField_1.setColumns(10); } public String creatJSON(){ String msg=textArea.getText(); JSONObject obj=new JSONObject(); obj.put("type", "toSingle"); obj.put("message",msg); Date date=new Date(); obj.put("time", date.getTime()); obj.put("from", socket.getInetAddress().getHostAddress()); obj.put("to", "192.168.0.85"); System.out.println(obj.toString()); return obj.toString() ; } public void read() { try { InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); model.addElement(line); System.out.println(line); } catch (IOException e) { e.printStackTrace(); } } public void write(String msg){ try { OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); bw.write(msg+"\n"); model.addElement("客户端说: "+msg); textArea.setText(""); bw.flush(); } catch (IOException e) { e.printStackTrace(); } }}
package com.java.test;public class MyClientRead implements Runnable { private MyClient client; public MyClientRead(MyClient client){ this.client=client; } @Override public void run() { while(true){ client.read(); } } }
package com.java.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Socket;public class MyServerRead implements Runnable{ private StartServer startServer; private Socket socket; public MyServerRead(StartServer startServer,Socket socket){ this.startServer=startServer; this.socket=socket; } @Override public void run() { try { InputStream is = socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); while(true){ String line=br.readLine(); startServer.readLine(line); System.out.println(); } } catch (IOException e) { e.printStackTrace(); } }}
0 0
- 第十五天 简单聊天
- 第十五天
- 第十五天
- 第十五天
- 第十五天
- 第十五天
- 第十五天
- 第十五天
- 安卓第十五天笔记-图形图像一些简单处理
- 世界杯第十五天
- 第十五天 编写代码
- 第十五天:听课笔记
- 第十五天:总结
- 第十五天总结0409
- 星海第十五天
- 程序学习第十五天
- Java第十五天
- 第十五天(Ajax)
- JavaScript基础----13Javascript函数-调用函数
- C#通过PHP向MySQL插入数据的编码问题
- 八月六日 Linux操作系统学习笔记
- JavaScript基础----14Javascript函数-带参数的函数
- 编写主引导扇区代码
- 第十五天 简单聊天
- 快速修改frame
- 湖南多校对抗赛(G - G)
- JavaScript基础----15Javascript函数-带返回值的函数
- iOS CoreBluetooth参考
- 导航视图控制器及其属性传值
- 关于 tomcat 集群中 session 共享的三种方法
- HDOJ2037今年暑假不AC(贪心)
- JavaScript基础----16Javascript函数-局部变量和全局变量