📄 network.java
字号:
package javacontest;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
/*这个类主要负责网络对战及其交互*/
public class NetWork extends JFrame {
JRadioButton rButton[] = new JRadioButton[2];
JTextField State, cHost, SMSField;
JButton Connect, DisConnect, SendMsg, SendFile;
JTextArea MessageTextArea;
ServerSocket sSocket;
Socket InSocket, cSocket;
BufferedReader bufReader;
PrintWriter pWriter;
String InStr;
int type = JOptionPane.ERROR_MESSAGE;
String title = "Error Message";
String ErrorMsg = "Error";
Container c = new Container();
NetWork_Client Client;
NetWork_Server Server;
public NetWork() { //
super("黑白棋网络对战!");
//Layout
c.setLayout(null);
setSize(500, 480);
getContentPane().add(c);
MessageTextArea = new JTextArea();
MessageTextArea.setBounds(100, 130, 200, 200);
MessageTextArea.setLineWrap(true);
c.add(MessageTextArea);
//c.add(new JScrollPane(MessageTextArea));
//the exit event
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent ClosingWin) {
System.exit(0);
}
});
//interphase
String bStr[] = {"Server", "Client"};
ButtonGroup bGroup = new ButtonGroup();
for (int i = 0; i < 2; i++) {
rButton[i] = new JRadioButton(bStr[i]);
rButton[i].setBounds(10 + i * 80, 30, 80, 20);
bGroup.add(rButton[i]);
c.add(rButton[i]);
}
rButton[0].setSelected(true);
JLabel ConnectState = new JLabel("ConnectState :");
ConnectState.setBounds(200, 30, 100, 20);
c.add(ConnectState);
State = new JTextField();
State.setBounds(320, 30, 150, 20);
c.add(State);
JLabel ConnectHost = new JLabel("ConnectHost IP");
ConnectHost.setBounds(10, 80, 100, 20);
c.add(ConnectHost);
cHost = new JTextField();
cHost.setBounds(100, 80, 200, 20);
c.add(cHost);
Connect = new JButton("Connect");
Connect.setBounds(320, 80, 100, 20);
c.add(Connect);
Connect.addActionListener(new ActionListener() { //the event of the connect button
public void actionPerformed(ActionEvent e) {
try {
if (rButton[0].isSelected() == true) { //start up the Server Thread
InStr = "";
SMSField.setText("");
Server.start();
} else { //start up the Client thread
InStr = "";
SMSField.setText("");
Client.start();
}
} catch (Exception Ex) {
return;
} finally {
DisConnect.setEnabled(true);
SendMsg.setEnabled(true);
Connect.setEnabled(false);
}
}
});
JLabel ReceInfo = new JLabel("Information ");
ReceInfo.setBounds(10, 130, 100, 20);
c.add(ReceInfo);
DisConnect = new JButton("DisConnect");
DisConnect.setBounds(320, 130, 100, 20);
c.add(DisConnect);
DisConnect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { //the event of the disconnect button
//close the server or client
try {
if (rButton[0].isSelected() == true) { //close the server
InSocket.close();
} else { //close the client
cSocket.close();
}
} catch (Exception Ex) {
return;
} finally {
State.setText("Closed...");
DisConnect.setEnabled(false);
SendMsg.setEnabled(false);
Connect.setEnabled(true);
}
}
});
SMSField = new JTextField();
SMSField.setBounds(100, 350, 200, 20);
SMSField.setToolTipText("Enter your message here");
c.add(SMSField);
// send message
SendMsg = new JButton("Send");
SendMsg.setBounds(320, 350, 100, 20);
SendMsg.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
int key = e.getKeyCode();
if (key == 119) {
try {
pWriter.write(SMSField.getText());
pWriter.write("\n");
pWriter.flush();
SMSField.setText("");
} catch (NullPointerException NpEx) {
return;
}
}
}
public void keyReleased(KeyEvent e) {
}
});
SendMsg.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
pWriter.write(SMSField.getText());
pWriter.write("\n");
pWriter.flush();
if (rButton[0].isSelected() == true) {
MessageTextArea.setText("(Server) :" + SMSField.getText());
} else {
MessageTextArea.setText("(Client) :" + SMSField.getText());
}
SMSField.setText("");
} catch (NullPointerException NpEx) {
return;
}
}
});
c.add(SendMsg);
//send file
/*
SendFile = new JButton("Send File");
SendFile.setBounds(320 , 300 , 100,20);
SendFile.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFileChooser FileCh = new JFileChooser();
FileCh.setDialogTitle("Open File");
FileCh.setApproveButtonText("Open");
FileCh.showOpenDialog(c);
File FileName = FileCh.getSelectedFile();
FileReader FRead = null;
FileInputStream Input = null;
try
{
Input = new FileInputStream(FileName);
}
}
});
c.add(SendFile);
*/
JLabel about = new JLabel("STAR 小组制作!");
about.setBounds(50, 400, 100, 20);
c.add(about);
//set up the server and client thread
Client = new NetWork_Client();
Server = new NetWork_Server();
}
//The Server Thread
class NetWork_Server extends Thread {
public NetWork_Server() {
}
public void run() {
try {
Connect.setEnabled(true);
State.setText("Waiting for Connect");
cHost.setText(InetAddress.getLocalHost().getHostAddress());
sSocket = new ServerSocket(1984);
InSocket = sSocket.accept();
bufReader = new BufferedReader(new InputStreamReader(InSocket.
getInputStream()));
pWriter = new PrintWriter(InSocket.getOutputStream(), true);
while (true) {
if (sSocket.isBound() == true) { //makesure is bound
State.setText("Connecting");
DisConnect.setEnabled(true);
Connect.setEnabled(false);
SendMsg.setEnabled(true);
break;
}
} while (true) {
InStr = bufReader.readLine();
if (InStr.length() > 0) {
MessageTextArea.setText("(Client) :");
MessageTextArea.append(InStr);
MessageTextArea.append("\n");
}
}
} catch (Exception Ex) {
if (sSocket.isBound() == false) {
ErrorMsg = "Disconnected";
State.setText("Closed...");
DisConnect.setEnabled(false);
Connect.setEnabled(true);
//InSocket.close();
JOptionPane.showMessageDialog(c, ErrorMsg, title, type);
}
return;
}
}
}
//The Client Thread
class NetWork_Client extends Thread {
public NetWork_Client() {
}
public void run() {
try {
Connect.setEnabled(false);
State.setText("Waiting for Connect");
cSocket = new Socket();
cSocket.connect(new InetSocketAddress(cHost.getText(), 1984),
1985);
bufReader = new BufferedReader(new InputStreamReader(cSocket.
getInputStream()));
pWriter = new PrintWriter(cSocket.getOutputStream(), true);
while (true) { //makesure is connected
if (cSocket.isConnected() == true) {
State.setText("Connecting");
DisConnect.setEnabled(true);
Connect.setEnabled(false);
SendMsg.setEnabled(true);
break;
}
}
InStr = "";
while (true) {
InStr = bufReader.readLine();
if (InStr.length() > 0) {
MessageTextArea.setText("(Server) :");
MessageTextArea.append(InStr);
MessageTextArea.append("\n");
}
}
} catch (Exception Ex) {
ErrorMsg = "Disconnected";
JOptionPane.showMessageDialog(c, ErrorMsg, title, type);
return;
}
}
}
// public static void main(String args[]) {
// NetWork nw = new NetWork();
// nw.setVisible(true);
// nw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// nw.setResizable(false);
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -