您的位置:首页 > 编程语言 > Java开发

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();
}

}

}

}


注意修改包名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息