?? appserver.java
字號:
/*小凌 QQ:3312883*/
import java.awt.event.*;
import java.io.*;
import java.net.*;
//客戶信息
class Customer implements Serializable
{
//聲名 用戶名 密碼
String custName;
String custPassword;
}
public class AppServer extends Thread
{
//聲名服務器套接字
ServerSocket serverSocket;
public AppServer()
{
try//捕獲異常
{
serverSocket = new ServerSocket(1001);//初始化 服務器套接字 設置服務器端口為 1001
}
catch(IOException e)
{
fail(e,"不能啟動服務器");//如果初始化失敗 報錯 顯示異常
}
System.out.println("服務器啟動 . . .");//服務器初始化成功
start();//啟動線程
}
public static void fail(Exception e,String str)//自定義異常
{
System.out.println(str + "." + e);
}
public void run()//啟動線程開始
{
try//捕獲異常
{
while(true)//while里就開始監聽客戶端數據
{
Socket client = serverSocket.accept();//獲取客戶端Socket 當有數據到達時 把數據裝到client里
/*Connection con =*/ new Connection(client);//然后 初始化一個Connection (PS:因為AppServer類到這里就是循環了 所以我把前面那段注釋掉了沒影響:)
}
}
catch(IOException e)//如果監聽有問題就 包報錯
{
fail(e,"Not listening");
}
}
public static void main(String args[])//程序入口
{
new AppServer();//初始化 AppServer
}
}
class Connection extends Thread
{
//聲明一個客戶端的套接字(PS:上面那個是服務器套接字 這個是客戶端的)和 一個輸入流和輸出流
protected Socket netClient;//客戶端的Socket
protected ObjectInputStream fromClient;//從客戶端獲得數據
protected PrintStream toClient;//發送數據到客戶端
public Connection(Socket client)//這里就是41行 那里初始化Connection
{
netClient = client;//把client賦值到netClient里
try//捕獲異常
{
fromClient = new ObjectInputStream(netClient.getInputStream());//初始化一個輸入流 把netClient里的數據賦值到fromClient上
toClient = new PrintStream(netClient.getOutputStream());//初始化一個輸出流 把netClient里的連接數據賦值到toClient上
}
catch(IOException e)//如果上面的初始化有問題 就關閉套接字
{
try
{
netClient.close();//關閉套接字
}
catch(IOException el)
{
System.err.println("Unable to set up streams" + el);
return;
}
}
this.start();//啟動第二個線程
}
public void run()//啟動第二個線程開始
{
//聲明一個Customer類 (PS:Customer就是最上面那里 Customer其實就是一個數據結構)
Customer clientMessage;
try//捕獲異常
{
for(;;)//進入判斷循環
{
clientMessage = (Customer)fromClient.readObject();//這里是將68行初始化的fromClient的數據讀出來 轉換成Customer類型 然后在賦值到clientMessage上
if(clientMessage == null)//如果數據為空 就break
break;
toClient.println("收到服務器返回數據:" +"用戶名"+ clientMessage.custName+"密碼"+clientMessage.custPassword);//用toClient發送數據回客戶端
System.out.println("登陸:" + "用戶名" +clientMessage.custName+"密碼"+clientMessage.custPassword);//這句在服務器控制臺上顯示 連接上服務器的客戶端 用戶和密碼
}
}
catch(IOException e)//定義IO異常
{
System.out.println("Error in reading object" + e);
}
catch(ClassNotFoundException el)
{
System.out.println("Error in reading object" + el);
}
finally//finally是撒子搞忘了...
{
try
{
netClient.close();
}
catch(IOException e)
{
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -