Java 聊天室
2016-07-27 22:34
405 查看
学习内容 :
效果图如下 :
界面可自行美化
代码如下
注意修改包名。
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(); } } } }
注意修改包名。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Linux socket 初步
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序