📄 server.java
字号:
package server;
import utility.ConnectNConstants;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.util.Date;
public class Server extends JFrame implements ConnectNConstants {
private static final long serialVersionUID = 1L;
private ServerSocket serverSocket;
public static void main(String[] args) {
int port = 8000;
Server frame;
if (args.length == 1) {
port = Integer.parseInt(args[0]);
}
frame = new Server(port);
frame.setVisible(false);
}
public Server(int port) {
JTextArea serverLog = new JTextArea();
JScrollPane scrollPane = new JScrollPane(serverLog);
getContentPane().add(scrollPane, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 300);
setTitle("ConnectNServer");
setVisible(true);
try {
// Create a server socket
this.serverSocket = new ServerSocket(port);
serverLog.append(new Date() + ": Server started at socket " + port
+ "\n");
// Number a session
int sessionNo = 1;
// Ready to create a session for every two players
while (true) {
serverLog.append(new Date()
+ ": Wait for players to join session " + sessionNo
+ '\n');
// Connect to player 1
Socket player1 = serverSocket.accept();
serverLog.append(new Date() + ": Player 1 joined session "
+ sessionNo + '\n');
serverLog.append("Player1's IP address: "
+ player1.getInetAddress().getHostAddress() + '\n');
// Notify that the player is Player 1
new DataOutputStream(player1.getOutputStream())
.writeInt(PLAYER1);
//Get game initial setting from Player 1
int connectNumber, dropNumber;
int rowNumber, columnNumber;
DataInputStream din = new DataInputStream(player1
.getInputStream());
rowNumber = din.readInt();
columnNumber = din.readInt();
connectNumber = din.readInt();
dropNumber = din.readInt();
serverLog.append("Player1 set the game to " + rowNumber
+ " rows and " + columnNumber + " columns, " + "get a "
+ connectNumber + " connection to win, " + dropNumber
+ " disc(s) drop each time \n");
// Connect to player 2
Socket player2 = serverSocket.accept();
serverLog.append(new Date() + ": Player2 joined session "
+ sessionNo + '\n');
serverLog.append("Player 2's IP address: "
+ player2.getInetAddress().getHostAddress() + '\n');
// Notify that the player is Player 2 and the game initial setting
DataOutputStream dout = new DataOutputStream(player2
.getOutputStream());
dout.writeInt(PLAYER2);
dout.writeInt(rowNumber);
dout.writeInt(columnNumber);
dout.writeInt(connectNumber);
dout.writeInt(dropNumber);
// Display this session and increment session number
serverLog.append(new Date() + ": Start a thread for session "
+ sessionNo++ + '\n');
// Create a new thread for this session of two players
HandleASession thread = new HandleASession(player1, player2,
rowNumber, columnNumber, connectNumber, dropNumber);
// Start the new thread
thread.start();
}
} catch (IOException ex) {
System.err.println("Lose player");
}
finally{
try {
this.serverSocket.close();
} catch (IOException e) {
System.exit(1);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -