witam,
mam następujący problem: muszę napisać grę sieciowa w javie. Gra polega na graniu w kółko i krzyżyk na planszy 30 pól na 30. Gdy jeden z użytkowników gra, czyli jest jego tura, drugi ma zablokowane klawisze. Mój problem polega na tym, że klient dane z serwera odbiera tylko za pomocą przycisku "odbierz", samodzielnie gdy socket nasłuchuje na porcie i coś się na nim pojawi, program nie chce tego wyświetlić/przyjąć. Drugi problem to juz z serverem. Gdy jeden użytkownik coś wyśle a drugi naciśnie przycisk "odbierz" to program wisi... nie odbiera danych. Lecz gdy jeden coś wyśle, drugi też coś wyśle i Od razu użyje przycisku "odbierz", odbierze dane prawidłowo w programie, ale następna taka "tura" już powoduje zawieszenie programu...
kod serwera:
public class ServerRunnable implements Runnable
{
private int numer;
private Socket incoming;
private static boolean isFinish = false;
private static String strPrzychodzacy = "";
private static String strWychodzacy = "";
private static String strPrzychodzacy2 = "";
private static String strWychodzacy2 = "lock";
private InputStream inStream;
private OutputStream outStream;
private PrintWriter out;
private Scanner in ;
private static long[] threadsID = new long[2];
private static int numerID = 0;
public ServerRunnable(Socket i, int c)
{
try
{
incoming = i;
numer = c;
inStream = incoming.getInputStream();
outStream = incoming.getOutputStream();
out = new PrintWriter(outStream, true);
in = new Scanner(inStream);
}
catch(IOException e)
{
}
}
public void run()
{
threadsID[numerID] = Thread.currentThread().getId();
System.out.println("Podlacza sie watek numer: " +Thread.currentThread().getId());
numerID = numerID + 1;
try
{
inStream = incoming.getInputStream();
outStream = incoming.getOutputStream();
out = new PrintWriter(outStream, true);
in = new Scanner(inStream);
while(isFinish == false)
{
if(Thread.currentThread().getId() == threadsID[0])
{
if(strWychodzacy == "lock")
{
out.println("lock");
strWychodzacy = "";
}
if(strWychodzacy != null)
out.println(strWychodzacy);
}
if(in.hasNext())
{
strPrzychodzacy = in.nextLine();
System.out.println(strPrzychodzacy);
strWychodzacy2 = strPrzychodzacy;
System.out.println(strWychodzacy2);
}
if(Thread.currentThread().getId() == threadsID[1])
{
if(strWychodzacy2 == "lock")
{
out.println("lock");
strWychodzacy2 = "";
}
if(strWychodzacy2 != null)
{
out.println(strWychodzacy2);
}
if(in.hasNext())
{
strPrzychodzacy2 = in.nextLine();
strWychodzacy = strPrzychodzacy2;
System.out.println(strPrzychodzacy2);
System.out.println(strWychodzacy2);
}
}
}
}
catch(IOException f)
{
}
}
}
kod klienta(tylko funkcje wyslij,odbierz i polacz):
private JButton getPPolacz() {
if (pPolacz == null) {
pPolacz = new JButton();
pPolacz.setBounds(new Rectangle(678, 384, 105, 23));
pPolacz.setBackground(new Color(238, 238, 238));
pPolacz.setText("Połącz");
pPolacz.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{
try
{
String port = tport.getText();
int port2 = Integer.parseInt(port);
echoSocket = new Socket("0.0.0.0",port2);
out = new PrintWriter(echoSocket.getOutputStream(),true);
in = new Scanner(new InputStreamReader(echoSocket.getInputStream()));
}
catch (IOException f)
{
System.out.println("Próba połączenia zakończona niepowodzeniem.");
f.printStackTrace();
}
}
});
}
return pPolacz;
}
private void wyslij(String txt)
{
try
{
if(txt.charAt(0) == 'p' && txt.charAt(1) == '-')
{
out.println(txt);
przyciskiZablokowane();
}
else
{
out.println(txt);
}
}
catch (NullPointerException e)
{
tPrzychodzace.setText("Nic nie wyslano");
}
catch (StringIndexOutOfBoundsException e)
{
tPrzychodzace.setText("Nic nie wyslano");
}
}
private JButton getPOdbierz() {
if (pOdbierz == null) {
pOdbierz = new JButton();
pOdbierz.setBounds(new Rectangle(592, 418, 81, 18));
pOdbierz.setText("receive");
pOdbierz.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{
if(in.hasNext())
{
help = in.nextLine();
if(help == "")
{
}
if(help != "")
{
if(help.equals("unlock")) przyciskiOdblokowane();
if(help.equals("lock")) przyciskiZablokowane();
if(help.equals("KONIEC")) koniec();
char[] h = help.toCharArray();
if(h.length > 0)
{
if(help.charAt(0) == 'p')
{
zaznacz(help);
przyciskiOdblokowane();
}
if(help.charAt(0) != 'p' && !(help.equals("KONIEC")) && !(help.equals("lock")) && !(help.equals("unlock")))
{
tPrzychodzace.setText(help);
}
}
}
}}
}
);
}
return pOdbierz;
}