Java 聊天室
来源:互联网 发布:linux用ubuntu 编辑:程序博客网 时间:2024/05/20 18:15
学习内容 : Socket
, Thread
, IO操作
,简单的GUI控件
效果图如下 :
界面可自行美化
代码如下
package com.hwaphon;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.ArrayList;import java.util.Iterator;public class ServerClient { private ArrayList<PrintWriter> mWriters; public class MyHandler implements Runnable { Socket mSocket; BufferedReader mReader; public MyHandler(Socket socket) { mSocket = socket; try { InputStreamReader reader = new InputStreamReader( mSocket.getInputStream()); mReader = new BufferedReader(reader); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { String message = ""; try { while ((message = mReader.readLine()) != null) { tellEveryone(message); } } catch (IOException e) { e.printStackTrace(); } } } public void start() { mWriters = new ArrayList<>(); try { ServerSocket serverSocket = new ServerSocket(5000); while (true) { Socket socket = serverSocket.accept(); PrintWriter pWriter = new PrintWriter(socket.getOutputStream()); mWriters.add(pWriter); Thread thread = new Thread(new MyHandler(socket)); thread.start(); System.out.println("Got a connection"); } } catch (IOException e) { e.printStackTrace(); } } public void tellEveryone(String message) { Iterator<PrintWriter> iterator = mWriters.iterator(); while (iterator.hasNext()) { PrintWriter writer = iterator.next(); writer.println(message); writer.flush(); } } public static void main(String[] args) { new ServerClient().start(); }}package com.hwaphon;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;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.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import com.hwaphon.ServerClient.MyHandler;public class SocketClient { private JFrame mFrame; private JPanel mPane; private JTextArea mArea; private JScrollPane mScrollPane; private JButton mButton; private JTextField mField; private Socket mSocket; private PrintWriter mWriter; private BufferedReader mReader; public SocketClient() { setUI(); setNetWork(); new Thread(new IncomingReader()).start(); } private void setNetWork() { try { mSocket = new Socket("127.0.0.1", 5000); mWriter = new PrintWriter(mSocket.getOutputStream()); mReader = new BufferedReader(new InputStreamReader( mSocket.getInputStream())); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void setUI() { mButton = new JButton("Send"); mButton.setFocusable(false); mButton.setBackground(Color.WHITE); mButton.addActionListener(new SendListener()); mField = new JTextField(20); mArea = new JTextArea(6, 18); Font font = new Font("sanserif", Font.BOLD, 24); mArea.setFont(font); mArea.setLineWrap(true); mArea.setWrapStyleWord(true); mArea.setEditable(false); mScrollPane = new JScrollPane(mArea); mScrollPane .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); mScrollPane .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); mPane = new JPanel(); mPane.add(mScrollPane); mPane.add(mField); mPane.add(mButton); mFrame = new JFrame(); mFrame.getContentPane().add(mPane, BorderLayout.CENTER); mFrame.setSize(480, 320); mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mFrame.setLocationRelativeTo(null); mFrame.setVisible(true); } public class SendListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { String message = mField.getText().toString(); mWriter.println(message); mWriter.flush(); mField.setText(""); mField.requestFocus(); } } public static void main(String[] args) { SocketClient soClient = new SocketClient(); } public class IncomingReader implements Runnable { @Override public void run() { String message = ""; try { while ((message = mReader.readLine()) != null) { mArea.append(message + "\n"); } } catch (IOException e) { e.printStackTrace(); } } }}
注意修改包名。
5 2
- java聊天室
- java 聊天室
- Java聊天室
- java 聊天室
- java 聊天室
- java聊天室
- Java聊天室
- Java 聊天室
- 聊天室--java socket
- JAVA版聊天室
- java 语音聊天室
- 网络聊天室(Java)
- 简单的java聊天室
- java聊天室代码
- java 语音聊天室
- JAVA 的聊天室程序
- JAVA网络聊天室程序
- 練手小項目一:JAVA聊天室源代码
- 决策树
- iOS --- 自定义navigationBar的两种常见方式
- Http协议备忘录
- 目前为止,在图像缩放项目遇到的一些坑
- 【HOJ1867】经理的烦恼-区间求和+判素数
- Java 聊天室
- iOS面试题,看看你究竟知道多少(二)
- Retrofit2使用CallAdapterFactory的错误处理
- day07_xml学习
- Gradle 详解
- Java面向对象二
- android Cannot execute task: the task has already been executed (a task can be executed only once)
- 2016 多校联训 第三场Teacher Bo hdoj5762
- webpack-dev-server+vue构建开发环境(一)