Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
import java.net.*;
import java.io.*;
public class QQServer {
public static void main(String[] args){
try {
//服務器在8000端口監聽
ServerSocket ss = new ServerSocket(8000);
System.out.println("服務器正在8000端口監聽.......");
Socket s = ss.accept();
//接收用戶名和密碼
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String uandp = br.readLine();
//檢驗點
System.out.println(uandp);
} catch (Exception e) {
// TODO: handle exception
}
}
}
Paste_Image.png
Paste_Image.png
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.*;
public class QQLogin extends JFrame implements ActionListener{
//new 組件
JLabel labUser = new JLabel("用戶名");
JLabel labPass = new JLabel("密碼");
JTextField txtUser = new JTextField();
JPasswordField txtPass = new JPasswordField();
JButton btnLogin = new JButton("登錄");
JButton btnReg = new JButton("注冊");
JButton btnCancel = new JButton("取消");
//布置輸入面板
JPanel panInput = new JPanel();
//布置按鈕面板
JPanel panButton = new JPanel();
public QQLogin() {
this.setSize(250, 125);
//注冊事件監聽
btnLogin.addActionListener(this);
btnReg.addActionListener(this);
btnCancel.addActionListener(this);
//布置輸入面板
panInput.setLayout(new GridLayout(2, 2));
panInput.add(labUser);
panInput.add(txtUser);
panInput.add(labPass);
panInput.add(txtPass);
//布置按鈕面板
panButton.setLayout(new FlowLayout());
panButton.add(btnLogin);
panButton.add(btnReg);
panButton.add(btnCancel);
//布置窗體
this.setLayout(new BorderLayout());
this.add(panInput, BorderLayout.CENTER);
this.add(panButton, BorderLayout.SOUTH);
}
public static void main(String args[]){
Object w = new QQLogin();
((QQLogin)w).setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0){
if(arg0.getActionCommand().equals("登錄")){
// System.out.println("用戶點擊了登錄");
//發送用戶名和密碼到服務器端
String user = txtUser.getText();
String pass = txtPass.getText();
try {
Socket s = new Socket("127.0.0.1", 8000);
OutputStream os = s.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(osw,true);
pw.println(user + "%" + pass);
} catch (Exception e) {
// TODO: handle exception
}
}
if(arg0.getActionCommand().equals("注冊")){
System.out.println("用戶點擊了注冊");
}
if(arg0.getActionCommand().equals("取消")){
System.out.println("用戶點擊了取消");
}
}
}
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
import java.net.*;
import java.io.*;
public class QQServer {
public static void main(String[] args){
try {
//服務器在8000端口監聽
ServerSocket ss = new ServerSocket(8000);
System.out.println("服務器正在8000端口監聽.......");
Socket s = ss.accept();
//接收用戶名和密碼
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String uandp = br.readLine();
//檢驗點
//拆分用戶名和密碼
String u = uandp.split("%")[0];
String p = uandp.split("%")[1];
OutputStream os = s.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(osw, true);
if (u.equals("aaa")&&p.equals("111")) {
//發送正確信息到客戶端
pw.println("ok");
}else {
//發送錯誤信息到客戶端
pw.println("err");
}
System.out.println(uandp);
} catch (Exception e) {
// TODO: handle exception
}
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.*;
public class QQLogin extends JFrame implements ActionListener{
//new 組件
JLabel labUser = new JLabel("用戶名");
JLabel labPass = new JLabel("密碼");
JTextField txtUser = new JTextField();
JPasswordField txtPass = new JPasswordField();
JButton btnLogin = new JButton("登錄");
JButton btnReg = new JButton("注冊");
JButton btnCancel = new JButton("取消");
//布置輸入面板
JPanel panInput = new JPanel();
//布置按鈕面板
JPanel panButton = new JPanel();
public QQLogin() {
this.setSize(250, 125);
//注冊事件監聽
btnLogin.addActionListener(this);
btnReg.addActionListener(this);
btnCancel.addActionListener(this);
//布置輸入面板
panInput.setLayout(new GridLayout(2, 2));
panInput.add(labUser);
panInput.add(txtUser);
panInput.add(labPass);
panInput.add(txtPass);
//布置按鈕面板
panButton.setLayout(new FlowLayout());
panButton.add(btnLogin);
panButton.add(btnReg);
panButton.add(btnCancel);
//布置窗體
this.setLayout(new BorderLayout());
this.add(panInput, BorderLayout.CENTER);
this.add(panButton, BorderLayout.SOUTH);
}
public static void main(String args[]){
Object w = new QQLogin();
((QQLogin)w).setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0){
if(arg0.getActionCommand().equals("登錄")){
// System.out.println("用戶點擊了登錄");
//發送用戶名和密碼到服務器端
String user = txtUser.getText();
String pass = txtPass.getText();
try {
Socket s = new Socket("127.0.0.1", 8000);
OutputStream os = s.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(osw,true);
pw.println(user + "%" + pass);
//接受服務器發送回來的確認信息
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String yorn = br.readLine();
//顯示主窗體
if (yorn.equals("ok")) {
QQMain w = new QQMain();
w.setVisible(true);
this.setVisible(false);
}else {
JOptionPane.showMessageDialog(this, "對不起,用戶名或密碼錯誤");
}
} catch (Exception e) {
// TODO: handle exception
}
}
if(arg0.getActionCommand().equals("注冊")){
System.out.println("用戶點擊了注冊");
}
if(arg0.getActionCommand().equals("取消")){
System.out.println("用戶點擊了取消");
}
}
}
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class QQMain extends JFrame implements ActionListener {
JTextField txtMess = new JTextField();
JComboBox cmbUser = new JComboBox();
JTextArea txtContent = new JTextArea();
QQMain(){
this.setSize(300, 400);
//new組件
JButton btnSend = new JButton("發送");
JScrollPane spContent = new JScrollPane(txtContent);
//注冊事件監聽
btnSend.addActionListener(this);
//布置小面板
JPanel panSmall = new JPanel();
panSmall.setLayout(new GridLayout(1, 2));
panSmall.add(cmbUser);
panSmall.add(btnSend);
//布置大面板
JPanel panBig = new JPanel();
panBig.setLayout(new GridLayout(2, 1));
panBig.add(txtMess);
panBig.add(panSmall);
//布置窗體
this.setLayout(new BorderLayout());
this.add(panBig, BorderLayout.NORTH);
this.add(spContent,BorderLayout.CENTER);
//讀聊天記錄
try {
File f = new File("D:/work/聊天記錄.qq");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
txtContent.append(br.readLine()+"\n");
}
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void actionPerformed(ActionEvent arg0){
//txtMess ====>txtContent
txtContent.append(txtMess.getText()+"\n");
//將txtMess的內容存入聊天記錄文件
try {
File f = new File("D:/work/聊天記錄.qq");
FileWriter fw = new FileWriter(f,true);
PrintWriter pw = new PrintWriter(fw);
pw.println(txtMess.getText());
pw.close();
} catch (Exception e) {
// TODO: handle exception
}
//清除txtMess中的內容
txtMess.setText("");
}
}
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
class A{
int i = 10;
public void show() {
System.out.println(i);
}
}
class B extends A{
int i = 100;
public void show() {
System.out.println(i);
}
}
public class MyTest {
public static void main(String[] args){
A a = new B();
a.show();
System.out.println(a.i);
}
}
運行結果:
100
10
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
import java.net.*;
import java.io.*;
public class QQServer {
public static void main(String[] args){
try {
//服務器在8000端口監聽
ServerSocket ss = new ServerSocket(8000);
System.out.println("服務器正在8000端口監聽.......");
Socket s = ss.accept();
//接收用戶名和密碼
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String uandp = br.readLine();
//檢驗點
System.out.println(uandp);
//拆分用戶名和密碼
String u = "";
String p = "";
try {
u = uandp.split("%")[0];
p = uandp.split("%")[1];
} catch (Exception e) {
System.out.println(e);
// TODO: handle exception
}
OutputStream os = s.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(osw, true);
if("aaa".equals(u)&& "111".equals(p)){
//發送正確信息到客戶端
pw.println("ok");
//不斷發接收客戶端發送過來的信息
while (true) {
String message = br.readLine();
System.out.println(message);
}
}else {
//發送錯誤信息到客戶端
pw.println("err");
System.out.println("err");
}
System.out.println(uandp);
} catch (Exception e) {
// TODO: handle exception
}
}
}
/**
* QQLogin,登錄界面和邏輯
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class QQLogin extends JFrame implements ActionListener{
//new 組件
JLabel labUser = new JLabel("用戶名");
JLabel labPass = new JLabel("密碼");
JTextField txtUser = new JTextField();
JPasswordField txtPass = new JPasswordField();
JButton btnLogin = new JButton("登錄");
JButton btnReg = new JButton("注冊");
JButton btnCancel = new JButton("取消");
//布置輸入面板
JPanel panInput = new JPanel();
//布置按鈕面板
JPanel panButton = new JPanel();
public QQLogin() {
this.setSize(250, 125);
//注冊事件監聽
btnLogin.addActionListener(this);
btnReg.addActionListener(this);
btnCancel.addActionListener(this);
//布置輸入面板
panInput.setLayout(new GridLayout(2, 2));
panInput.add(labUser);
panInput.add(txtUser);
panInput.add(labPass);
panInput.add(txtPass);
//布置按鈕面板
panButton.setLayout(new FlowLayout());
panButton.add(btnLogin);
panButton.add(btnReg);
panButton.add(btnCancel);
//布置窗體
this.setLayout(new BorderLayout());
this.add(panInput, BorderLayout.CENTER);
this.add(panButton, BorderLayout.SOUTH);
}
public static void main(String args[]){
Object w = new QQLogin();
((QQLogin)w).setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0){
if(arg0.getActionCommand().equals("登錄")){
// System.out.println("用戶點擊了登錄");
//發送用戶名和密碼到服務器端
String user = txtUser.getText();
String pass = txtPass.getText();
try {
Socket s = new Socket("127.0.0.1", 8000);
OutputStream os = s.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(osw,true);
pw.println(user + "%" + pass);
System.out.println(user + "%" + pass);
//接受服務器發送回來的確認信息
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String yorn = br.readLine();
System.out.println(yorn);
//顯示主窗體
if("ok".equals(yorn)){
QQMain w = new QQMain();
w.setSocket(s);
w.setVisible(true);
this.setVisible(false);
}else {
JOptionPane.showMessageDialog(this, "對不起,用戶名或密碼錯誤");
}
} catch (Exception e) {
// TODO: handle exception
}
}
if(arg0.getActionCommand().equals("注冊")){
System.out.println("用戶點擊了注冊");
}
if(arg0.getActionCommand().equals("取消")){
System.out.println("用戶點擊了取消");
}
}
}
/**
* QQMain,主界面
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class QQMain extends JFrame implements ActionListener {
private Socket s;
JTextField txtMess = new JTextField();
JComboBox cmbUser = new JComboBox();
JTextArea txtContent = new JTextArea();
QQMain(){
this.setSize(300, 400);
//new組件
JButton btnSend = new JButton("發送");
JScrollPane spContent = new JScrollPane(txtContent);
//注冊事件監聽
btnSend.addActionListener(this);
//布置小面板
JPanel panSmall = new JPanel();
panSmall.setLayout(new GridLayout(1, 2));
panSmall.add(cmbUser);
panSmall.add(btnSend);
//布置大面板
JPanel panBig = new JPanel();
panBig.setLayout(new GridLayout(2, 1));
panBig.add(txtMess);
panBig.add(panSmall);
//布置窗體
this.setLayout(new BorderLayout());
this.add(panBig, BorderLayout.NORTH);
this.add(spContent,BorderLayout.CENTER);
//讀聊天記錄
try {
File f = new File("D:/work/聊天記錄.qq");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
txtContent.append(br.readLine()+"\n");
}
} catch (Exception e) {
// TODO: handle exception
}
}
public void setSocket(Socket value) {
s = value;
}
@Override
public void actionPerformed(ActionEvent arg0){
//txtMess ====>txtContent
txtContent.append(txtMess.getText()+"\n");
//將txtMess的內容存入聊天記錄文件
try {
File f = new File("D:/work/聊天記錄.qq");
FileWriter fw = new FileWriter(f,true);
PrintWriter pw = new PrintWriter(fw);
pw.println(txtMess.getText());
pw.close();
} catch (Exception e) {
// TODO: handle exception
}
//發送信息到服務器端
try {
OutputStream os = s.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(osw, true);
pw.println(txtMess.getText());
} catch (Exception e) {
// TODO: handle exception
}
//清除txtMess中的內容
txtMess.setText("");
}
}
運行錯誤結果:
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
運行正確結果:
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png