А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Э Ю Я Все примеры | Примеры по пакетам |
|
//Многопоточный сервер с защитой ресурса от одновременного доступа;
//Когда один клиент захватывает ресурс, значение resourceBusy=false;
//После освобождения ресурса resourceBusy=true;
package MultiThreadServer;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MultiThreadServer implements Runnable {
Socket socket;
static Boolean resourceBusy=false;
static String filename;
static String fileString;
MultiThreadServer(Socket socket) {
this.socket = socket;
}
public static String readPage(String fileName)
throws Exception
{
String strPage="";
StringBuilder sb=new StringBuilder();
String str="";
InputStreamReader inputstream = null;
try {
inputstream = new InputStreamReader(new FileInputStream(fileName)
, "utf-8");
BufferedReader in = new BufferedReader(inputstream);
while (((str = in.readLine()) != null)) {
sb.append(""+str+"");
}
} catch (IOException ex) {}
strPage=sb.toString();
return strPage;
}
public static String writeToFile(String filename, String strPage ){
PrintWriter writer = null;
try {
writer = new PrintWriter(new OutputStreamWriter(
new FileOutputStream(filename), "utf-8"));
writer.write(strPage);
writer.close();
} catch (Exception ex) {
}
return strPage;
}
static void getResource(String filename) throws Exception{
resourceBusy=true;
fileString= readPage(filename);
resourceBusy=false;
}
static void setResource(String filename,String resource){
resourceBusy=true;
writeToFile(filename, resource );
resourceBusy=false;
}
public void run() {
try {
PrintStream pstream = new PrintStream(socket.getOutputStream());
InputStream clientIn = socket.getInputStream();
BufferedReader br = new BufferedReader(new
InputStreamReader(clientIn));
String msgFromClient = br.readLine();
System.out.println("msgFromClient "+msgFromClient);
if((resourceBusy==false)){
if(msgFromClient.startsWith("read")){
try {
getResource(filename);
pstream.println(fileString);
} catch (Exception ex) {}
}
if(msgFromClient.startsWith("write")){
try {
msgFromClient=msgFromClient.replace("write ", "");
setResource(filename,msgFromClient);
pstream.println("Файл сохранен");
} catch (Exception ex) {}
}
}
else{
pstream.println("Порт "+socket.getPort()+" " + " занят");
}
pstream.close();
socket.close();
} catch (IOException e) {
System.out.println(e);
}
}
public static void main(String args[]) throws Exception {
filename="/home/evgeny/NetBeansProjects/JavaSamples2/src/server2/csv.txt";
ServerSocket ssock = new ServerSocket(1234);
System.out.println("Готов к соединению");
while (true) {
Socket sock = ssock.accept();
System.out.println("Соединен");
new Thread(new MultiThreadServer(sock)).start();
}
}
}
Клиент считывает текстовый csv-файл с сервера и выводит его на фрейм; |
|
|
|
|