?? chatserver.java
字號:
/* 聊天程序之服務器端ChatServer.java
* 建立服務器端,接收客戶端連接,
* 發送信息、關閉連接
*/
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatServer extends JFrame {
private JTextField inputBox;
private JTextArea outFrame;
private ObjectOutputStream outputS;
private ObjectInputStream inputS;
private ServerSocket toserver;
private Socket connection;
private int counter = 1;
public ChatServer()
{
super( "Server" );
Container container = getContentPane();
inputBox = new JTextField();
inputBox.setEnabled( false );
//輸出
inputBox.addActionListener(
//監聽
new ActionListener() {
// 發送信息
public void actionPerformed( ActionEvent event )
{
sendMsg( event.getActionCommand() );
}
}
);
container.add( inputBox, BorderLayout.NORTH );
// 輸出框
outFrame = new JTextArea();
container.add( new JScrollPane( outFrame ),
BorderLayout.CENTER );
setSize( 280, 160 );
setVisible( true );
}
// 處理連接
public void connectServer()
{
try {
// 創建一個ServerSocket.
toserver = new ServerSocket( 4000, 100 );
while ( true ) {
// 等待連接
wait4Connection();
// 獲取輸入輸出流
getStreams();
// 處理連接
processConnection();
// 關閉連接
closeConnection();
++counter;
}
}
catch ( EOFException eofException ) {
System.out.println( "Client terminated connection" );
}
//捕獲異常
catch ( IOException ioException ) {
ioException.printStackTrace();
}
}
private void wait4Connection() throws IOException
{
outFrame.setText( "等待連接……\n" );
connection = toserver.accept();
outFrame.append( "Connection " + counter +
"from: " +
connection.getInetAddress().getHostName()
);
}
private void getStreams() throws IOException
{
// 設置輸出流
outputS = new ObjectOutputStream(
connection.getOutputStream()
);
outputS.flush();
// 設置輸入流
inputS = new ObjectInputStream(
connection.getInputStream()
);
outFrame.append( "\nGet I/O streams\n" );
}
//處理客戶端連接
private void processConnection() throws IOException
{
// 連接成功
String message = "服務器端>> 連接成功";
outputS.writeObject( message );
outputS.flush();
// 輸入框
inputBox.setEnabled( true );
// 處理來自客戶端的信息
do {
// 讀取消息
try {
message = ( String ) inputS.readObject();
outFrame.append( "\n" + message );
outFrame.setCaretPosition(
outFrame.getText().length()
);
}
catch ( ClassNotFoundException classNotFoundException ) {
outFrame.append( "\nUnknown object type received" );
}
} while ( !message.equals( "客戶端>> TERMINATE" ) );
}
// 關閉socket
private void closeConnection() throws IOException
{
outFrame.append( "\nUser terminated connection" );
inputBox.setEnabled( false );
outputS.close();
inputS.close();
connection.close();
}
// 向客戶端發送消息
private void sendMsg( String message )
{
try {
outputS.writeObject( "服務器端>> " + message );
outputS.flush();
outFrame.append( "\n服務器端>>" + message );
}
catch ( IOException ioException ) {
outFrame.append( "\nError writing object" );
}
}
// main()方法
public static void main( String args[] )
{
ChatServer process = new ChatServer();
process.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
process.connectServer();
}
} // end class ChatServer
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -