Problém s modifikací – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s modifikací – Java – Fórum – Programujte.comProblém s modifikací – Java – Fórum – Programujte.com

 

Alfons
~ Anonymní uživatel
2 příspěvky
30. 1. 2014   #1
-
0
-

 Dobrý den, prosím vás o pomoc s programem ,u kterýho si nevím rady s modifikací. Když k TCP serveru připojím jednoho clienta vše funguje normálně když jich připojím vícero začne to zlobit a vypisovat různé chyby typu CurrentModificationException(v debugu) a program dále nefunguje, proto prosím o radu jak by to šlo spravně synchronizovat děkuji.

Server

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;


public class Server {
	private ServerSocket ssc;
	private String temp = "";
	private ArrayList<BufferedReader> read = new ArrayList<BufferedReader>();
	private ArrayList<BufferedWriter> write= new ArrayList<BufferedWriter>();
	public Server(String port) {
		 try {
			ssc = new ServerSocket(Integer.parseInt(port));
			
			Thread writer = new Thread(new Runnable() {
				synchronized public void run() {
					while(true) {
							cyrcle();
						}
					}
			});
			Thread clients = new Thread(new Runnable() {
				synchronized public void run() {
					while(true) {
						try {
							Socket sc = ssc.accept();
							newClient(sc);
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						
					}
				}
			});
			clients.start();
			writer.start();
			System.out.println("Server was started on port: " + port);
			while(true) {
				System.gc();
			}
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	private synchronized void cyrcle() {
		for(BufferedReader bfr : read ) {
			try {
				String temp = bfr.readLine();
				System.out.println(temp); 
				for(BufferedWriter bfw: write) {
					bfw.write(temp);
					bfw.newLine();
					bfw.flush();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	private synchronized void newClient(Socket sc) {
		try {
			read.add(new BufferedReader(new InputStreamReader(sc.getInputStream())));
			write.add(new BufferedWriter(new OutputStreamWriter(sc.getOutputStream())));
			System.out.println("Client " + sc.getInetAddress().getHostAddress() + " was connected succesfully.");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new Server("25565");
	}
}

Client 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.net.HttpURLConnection;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {
	
	public Client(String hostname,String port,String name) {
		try {
		Socket sc = new Socket(hostname,Integer.valueOf(port));
		Scanner sca = new Scanner(System.in);
		final BufferedReader in = new BufferedReader(new InputStreamReader(sc.getInputStream()));	
		final BufferedWriter out = new BufferedWriter(new OutputStreamWriter(sc.getOutputStream()));
			new Thread() {
				public void run() {
					while(true) {
						try {
						String get = in.readLine();
						System.out.println("\n" + get);
						}catch(IOException e) {
							
						}
					}
				}
			}.start();
			while(true) {
				String send = sca.nextLine();
				out.write(name +": " + send + "\r\n");
				out.flush();
				try{
					Thread.sleep(1);
				} catch(InterruptedException a) {a.printStackTrace();}
			}
		} catch(IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		//new Client(args[0],args[1],args[2]);
		new Client("127.0.0.1", "25565", "Name");
	}

}
Nahlásit jako SPAM
IP: 78.80.181.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
31. 1. 2014   #2
-
0
-

No já si hrál, zatím client-server bez vláken ale mám pocit že na serveru v objektu serversocket máš chybu

http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#ServerSocket()

koukni se na ten druhý konstruktor, ten integer by měl definovat max. počet dovolených připojení pokud to chápu správně.

Ale nevím to určitě. Vyzkoušej.

Nahlásit jako SPAM
IP: 217.112.161.–
Alfons
~ Anonymní uživatel
2 příspěvky
1. 2. 2014   #3
-
0
-

#2 NotBeginner
Děkuji moc :)

Nahlásit jako SPAM
IP: 78.80.181.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Program na modifikaci obrázků — založil kremlas

Problem — založil Ghosta

Problém — založil pali6

Problém v C — založil Robin

Problem s C++ — založil ower

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý