質數的規則是
網絡程序的功能都分為客戶端程序和服務器端程序實現
a) 接收用戶控制台輸入
b) 判斷輸入內容是否合法
c) 按照協議格式生成發送數據
d) 發送數據
e) 接收服務器端反饋
f) 解析服務器端反饋信息
a) 接收客戶端發送數據
b) 按照協議格式解析數據
c) 判斷數字是否是質數
d) 根據判斷結果
e) 將數據反饋給客戶端
分解好了網絡程序的功能以後
客戶端發送協議格式
將用戶輸入的數字轉換為字符串
例如用戶輸入
客戶端發送
服務器端發送協議格式
反饋數據長度為
例如客戶端發送數字
功能設計完成以後
下面分別以TCP方式和UDP方式實現該程序
以TCP方式實現的客戶端程序代碼如下
package example
import java
import
/**
* 以TCP方式實現的質數判斷客戶端程序
*/
public class TCPPrimeClient {
static BufferedReader br;
static Socket socket;
static InputStream is;
static OutputStream os;
/**服務器IP*/
final static String HOST =
/**服務器端端口*/
final static int PORT =
public static void main(String[] args) {
init()
while(true){
System
String input = readInput()
if(isQuit(input)){ //判讀是否結束
byte[] b =
send(b)
break; //結束程序
}
if(checkInput(input)){ //校驗合法
//發送數據
send(input
//接收數據
byte[] data = receive()
//解析反饋數據
parse(data)
}else{
System
}
}
close()
}
/**
* 初始化
*/
private static void init(){
try {
br = new BufferedReader(
new InputStreamReader(System
socket = new Socket(HOST
is = socket
os = socket
} catch (Exception e) {}
}
/**
* 讀取客戶端輸入
*/
private static String readInput(){
try {
return br
} catch (Exception e) {
return null;
}
}
/**
* 判斷是否輸入quit
* @param input 輸入內容
* @return true代表結束
*/
private static boolean isQuit(String input){
if(input == null){
return false;
}else{
if(
return true;
}else{
return false;
}
}
}
/**
* 校驗輸入
* @param input 用戶輸入內容
* @return true代表輸入符合要求
*/
private static boolean checkInput(String input){
if(input == null){
return false;
}
try{
int n = Integer
if(n >=
return true;
}else{
return false;
}
}catch(Exception e){
return false; //輸入不是整數
}
}
/**
* 向服務器端發送數據
* @param data 數據內容
*/
private static void send(byte[] data){
try{
os
}catch(Exception e){}
}
/**
* 接收服務器端反饋
* @return 反饋數據
*/
private static byte[] receive(){
byte[] b = new byte[
try {
int n = is
byte[] data = new byte[n];
//復制有效數據
System
return data;
} catch (Exception e){}
return null;
}
/**
* 解析協議數據
* @param data 協議數據
*/
private static void parse(byte[] data){
if(data == null){
System
return;
}
byte value = data[
//按照協議格式解析
switch(value){
case
System
break;
case
System
break;
case
System
break;
}
}
/**
* 關閉流和連接
*/
private static void close(){
try{
br
is
os
socket
}catch(Exception e){
e
}
}
}
在該代碼中
以TCP方式實現的服務器端的代碼如下
package example
import
/**
* 以TCP方式實現的質數判別服務器端
*/
public class TCPPrimeServer {
public static void main(String[] args) {
final int PORT =
ServerSocket ss = null;
try {
ss = new ServerSocket(PORT)
System
while(true){
Socket s = ss
new PrimeLogicThread(s)
}
} catch (Exception e) {}
finally{
try {
ss
} catch (Exception e
}
}
}
package example
import java
import
/**
* 實現質數判別邏輯的線程
*/
public class PrimeLogicThread extends Thread {
Socket socket;
InputStream is;
OutputStream os;
public PrimeLogicThread(Socket socket){
this
init()
start()
}
/**
* 初始化
*/
private void init(){
try{
is = socket
os = socket
}catch(Exception e){}
}
public void run(){
while(true){
//接收客戶端反饋
byte[] data = receive()
//判斷是否是退出
if(isQuit(data)){
break; //結束循環
}
//邏輯處理
byte[] b = logic(data)
//反饋數據
send(b)
}
close()
}
/**
* 接收客戶端數據
* @return 客戶端發送的數據
*/
private byte[] receive(){
byte[] b = new byte[
try {
int n = is
byte[] data = new byte[n];
//復制有效數據
System
return data;
} catch (Exception e){}
return null;
}
/**
* 向客戶端發送數據
* @param data 數據內容
*/
private void send(byte[] data){
try{
os
}catch(Exception e){}
}
/**
* 判斷是否是quit
* @return 是返回true
*/
private boolean isQuit(byte[] data){
if(data == null){
return false;
}else{
String s = new String(data)
if(s
return true;
}else{
return false;
}
}
}
private byte[] logic(byte[] data){
//反饋數組
byte[] b = new byte[
//校驗參數
if(data == null){
b[
return b;
}
try{
//轉換為數字
String s = new String(data)
int n = Integer
//判斷是否是質數
if(n >=
boolean flag = isPrime(n)
if(flag){
b[
}else{
b[
}
}else{
b[
System
}
}catch(Exception e){
e
b[
}
return b;
}
/**
*
* @param n
* @return
*/
private boolean isPrime(int n){
boolean b = true;
for(int i =
if(n % i ==
b = false;
break;
}
}
return b;
}
/**
* 關閉連接
*/
private void close(){
try {
is
os
socket
} catch (Exception e){}
}
}
本示例使用的服務器端的結構和前面示例中的結構一致
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25745.html