3.附件中的代碼僅供參考
TcpSocketServerDemo.java
package?yaoshun.InetAddress;import?java.io.DataInputStream;
import?java.io.DataOutputStream;
import?java.io.IOException;
import?java.net.ServerSocket;
import?java.net.Socket;
import?java.util.ArrayList;
import?java.util.List;
import?java.util.Random;
/*
*?客戶端:TCP服務器端 */public?class?TcpSocketServerDemo?{
private?ServerSocket?serverSocket;//?服務器連接
private?int?port;?//?服務器監聽端口
private?List<Socket>?sockets;
private?int?ranNumber;
/**
?*?服務器結束的標誌
?*/
public?boolean?ISEND;
public?TcpSocketServerDemo(int?port)?{
this.port?=?port;
serverSocket?=?null;
sockets?=?new?ArrayList<Socket>();
ranNumber?=?new?Random().nextInt(50);
}
/*
?*?啟動服務器
?*/
public?void?starServer()?{
try?{
//?第壹步:建立服務器連接(綁定監聽端口)
serverSocket?=?new?ServerSocket(port);
System.out.println("姚舜的服務器已經啟動...");
Socket?socket;//?客戶端連接(如果建立連接時,本機網絡不容或服務器程序未啟動則會拋出異常)
ServerThread?serverThread;
Thread?t2;
while?(!ISEND)?{
//?第二步:監聽端口(獲取客戶端連接)
socket?=?serverSocket.accept();
if?(ISEND)?{
while?(!socket.isClosed())?{
socket.close();
Thread.sleep(100);
}
}?else?{
sockets.add(socket);
serverThread?=?new?ServerThread(this,?socket);
t2?=?new?Thread(serverThread);
t2.start();
}
}
for?(Socket?s?:?sockets)?{
s.close();
}
serverSocket.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
public?static?void?main(String[]?args)?{
TcpSocketServerDemo?tDemo?=?new?TcpSocketServerDemo(1000);
tDemo.starServer();
}
/**
?*?校驗
?*?
?*?@param?i
?*?@return
?*/
public?int?check(int?i)?{
if?(i?<?ranNumber)?{
return?-1;
}?else?if?(i?>?ranNumber)?{
return?1;
}
return?0;
}
}
/**
*?服務端處理線程 * */class?ServerThread?implements?Runnable?{
private?TcpSocketServerDemo?tDemo;
private?Socket?socket;
private?DataInputStream?dis;//?輸入流(讀取數據)
private?DataOutputStream?dos;//?輸出流(發送數據)
public?ServerThread(TcpSocketServerDemo?tDemo,?Socket?socket)?{
super();
this.tDemo?=?tDemo;
this.socket?=?socket;
try?{
dis?=?new?DataInputStream(socket.getInputStream());
dos?=?new?DataOutputStream(socket.getOutputStream());
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
public?void?run()?{
String?message?=?"";
int?i;
int?index?=?0;
int?result?=?0;
while?(!message.equals("Quit")?&&?index?<?5)?{
try?{
message?=?dis.readUTF();
}?catch?(IOException?e)?{
e.printStackTrace();
}
try?{
i?=?Integer.parseInt(message);
result?=?tDemo.check(i);
if?(result?==?1)?{
dos.writeUTF("數字大了");
}?else?if?(result?==?-1)?{
dos.writeUTF("數字小了");
}
if?(result?==?0)?{
dos.writeUTF("猜中了");
break;
}
}?catch?(NumberFormatException?|?IOException?e)?{
continue;
}
index++;
}
try?{
dis.close();
dos.close();
socket.close();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
TcpSocketClientDemo.java
package?yaoshun.InetAddress;import?java.io.DataInputStream;
import?java.io.DataOutputStream;
import?java.io.IOException;
import?java.net.Socket;
import?java.net.UnknownHostException;
import?java.util.Scanner;
/*
*?演示類:TCP客戶端 */public?class?TcpSocketClientDemo?{
private?Socket?socket;//?客戶端連接(如果建立連接時,本機網絡不容或服務器程序未啟動則會拋出異常)
private?DataInputStream?dis;//?輸入流(讀取數據)
private?DataOutputStream?dos;//?輸出流(發送數據)
//?private?String?serverIP;//?服務器IP地址
//?private?int?serverPort;//?服務器監聽端口
private?String?sendData;//?發送的數據
public?TcpSocketClientDemo(String?serverIP,?int?serverPort)?throws?UnknownHostException,?IOException?{
//?this.serverIP?=?serverIP;
//?this.serverPort?=?serverPort;
socket?=?new?Socket(serverIP,?serverPort);
dis?=?new?DataInputStream(socket.getInputStream());
dos?=?new?DataOutputStream(socket.getOutputStream());
sendData?=?null;
startClient();
}
public?void?startClient()?{
try?{
//?第壹步:創建客戶端連接
System.out.println("===我的客戶端界面===");
//?第二步:客戶端向服務器發送數據
int?i?=?0;
Scanner?input?=?new?Scanner(System.in);
while?(i?<?5)?{
System.out.println("請輸入妳的內容(客戶端的):");
sendData?=?input.nextLine();
if?(sendData.equals("quit"))?{
break;
}
dos.writeUTF(sendData);
sendData?=?dis.readUTF();
System.out.println("接收到服務器內容:"?+?sendData);
if?(i?==?5)?{
System.out.println("超過允許次數,請重新連接服務器.");
}
if?(sendData.equals("猜中了"))?{
i?=?5;
}
i++;
}
input.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}?finally?{
//?第四步:關閉輸入流、輸出流和客戶端連接
try?{
dis.close();
dos.close();
socket.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
}
public?static?void?main(String[]?args)?{
try?{
new?TcpSocketClientDemo("127.0.0.1",?1000);
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}