package com.server;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import com.server.control.SendFileThread;
import com.server.util.GetFileInputStream;
import com.server.util.SendFile;
import com.server.util.WriteUserText;
public class Server {
public static Map ipMap = Collections.synchronizedMap(new HashMap());
public static Map ipMap1 = Collections.synchronizedMap(new HashMap());
/*
* ·þÎñÆ÷³õʼ»¯´°¿Ú
*/
public static Server_Frame sf = null;
/*
* ÿ¸ö¿Í»§»úÁ´½Ó¶ÔÓ¦µÄMap±êʶ
*/
public static int flag = 0;
public static int count = 0;
public static boolean fileFlag = false;
public static void util(Socket socket, String ip) {
if (ipMap.containsKey(ip)) {
flag = ipMap.get(ip);// È¡³öIP¶ÔÓ¦µÄÐòºÅ
/*
* Èç¹û¼à¿Ø¹¦ÄÜûÓпªÆô£¬Îҿ϶¨ÊDz»·ÅÐе쬵«ÊÇÁ´½ÓÒÀ¾É±£´æ
*/
ServerThread a = new ServerThread(socket, flag,ip);
System.out.println("1¡¢isAlive" + a.isAlive());
a.start();
System.out.println("2¡¢isAlive" + a.isAlive());
} else {
ipMap.put(ip, (ipMap.size()) + 1);// µÚһ̨»úÆ÷¶ÔÓ¦1
flag = ipMap.size();// µÚһ̨»úÆ÷Êä³ö1
/*
* ¿ªÆôÈÕÖ¾¼Ç¼Ïß³Ì
*/
new WriteUserText(ip).start();
ServerThread a = new ServerThread(socket, flag,ip);
System.out.println("1¡¢isAlive" + a.isAlive());
a.start();
System.out.println("2¡¢isAlive" + a.isAlive());
}
}
public static boolean mainListener(ServerSocket server) {
// ·þÎñÆ÷¶ËµÄSocket
Socket socket = null;
try {
socket = server.accept();
String ip = socket.getInetAddress().getHostAddress();
util(socket, ip);
/*
* if (ipMap.size() > 52) {
*
* break;// Ó¦¸Ã¾Ü¾øÁ´½Ó }
*/
// Èç¹ûµã»÷ÁË·¢ËÍÎļþ°´Å¥£¬Ôò´«ÊäͼƬµÄ¹¦ÄÜÓ¦¸Ã±»È¡Ïûµô
if (fileFlag/* °´Å¥±»µã»÷ */) {
server.close();
return false;
}
} catch (IOException e) {
System.out.println("1");
e.printStackTrace();
}
return true;
}
public static void sendFile(ServerSocket server) {
// ´Ë´¦ÒªÑ»·¼àÌýËùÓпͻ§¶Ë
Socket socket = null;
InputStream in = null;
DataOutputStream os = null;
System.out.println("count=" + count);
System.out.println("size=" + ipMap.size());
/*
* ÔÝʱ»¹Ã»Óнâ¾öinΪ¿ÕµÄÇé¿ö£¬¼´ÀÏʦȡÏû·¢ËÍÎļþ
*/
in = GetFileInputStream.getFileInputStream();
while (true) {
try {
socket = server.accept();
/*
* »ñÈ¡ÊäÈëÁ÷£¬Êä³öÁ÷£¬¸æË߿ͻ§¶ËÎÒÊÇÒª·¢Îļþ
*/
os = new DataOutputStream(socket.getOutputStream());
os.writeUTF("file");//µ½×îºóÔڹرÕ
String ip = socket.getInetAddress().getHostAddress();
if (ipMap1.containsKey(ip)) {
in = new FileInputStream(new File(SendFile.fileName));
System.out.println(4122);
SendFileThread b = new SendFileThread(socket, in);
System.out.println(77);
b.start();
try {
b.join();
count++;
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(78);
System.out.println("count=" + count);
System.out.println("size=" + ipMap.size());
} else {
System.out.println(5453);
ipMap1.put(ip, socket);
in = new FileInputStream(new File(SendFile.fileName));
SendFileThread b = new SendFileThread(socket, in);
System.out.println(777);
System.out.println(in);
b.start();
try {
b.join();
count++;
System.out.println(count);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(7875);
System.out.println("count=" + count);
System.out.println("size=" + ipMap.size());
}
System.out.println(4552);
} catch (IOException e1) {
System.out.println("233");
}
if (ipMap.size() == count) {
System.out.println(12312);
JOptionPane.showMessageDialog(null, "Îļþ·¢ËÍÍê³É£¡");
count = 0;
if (in != null)
try {
in.close();
} catch (IOException e) {
System.out.println(11);
e.printStackTrace();
}
if (os != null)
try {
os.close();
} catch (IOException e) {
System.out.println(11);
e.printStackTrace();
}
break;
}
}
}
public static void main(String[] args) {
// ´´½¨Ò»¸ö·þÎñÆ÷¶ËServerSocket£¬¶Ë¿ÚºÅΪ12000
ServerSocket server;
try {
sf = new Server_Frame();
server = new ServerSocket(12000);
/*
* ²ÉÓÃËÀÑ»·£¬²»¶Ï¼àÌýÀ´×Ô¿Í»§¶ËµÄÁ´½Ó
*/
while (true) {
System.out.println(23);
boolean isTrue = mainListener(server);
// ÒѾ¹Ø±Õ
if (!isTrue) {
System.out.println(1);
server = new ServerSocket(10000);
sendFile(server);
//server.close();
//ÒòΪÊDZ¾»ú£¬ËùÒÔÌáʾ±»Õ¼ÓÃ
fileFlag = false;
server = new ServerSocket(12000);
}
/*
* if ÏûÏ¢°´Å¥µã»÷ÁË£¬......
*/
/*
* if Ô¶³Ì²Ù¿Ø°´Å¥µã»÷ÁË£¬......
*/
}
} catch (IOException e) {
System.out.println(12121);
e.printStackTrace();
} catch (Exception e) {
System.out.println(121);
// try {
// server = new ServerSocket(12000);
// } catch (IOException e1) {
// e1.printStackTrace();
// }
e.printStackTrace();
}
}
}