Duvida com Thread e Socket

1 resposta
S

Fala pessoal, estou fazendo um teste com um programa pequeno de bate papo para uma aplicação maior.
Tenho um servidor e um cliente, apenas o dois, sem mais usuarios e quero receber e enviar quantas mensagens quiser entre eles, porém consigo enviar e receber apenas 1 de cada e depois o programa trava. Vou postar meu código e se alguém puder me ajudar, vou agradecer :slight_smile:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;



public class SocketServidor extends Object{

	/**
	 * @param args
	 * @throws IOException 
	 */
	
	private static Scanner scan;
	private static ServerSocket socketServer;
	private static Socket socket;
	private static DataInputStream di;
	private static DataOutputStream dos;
	
	
	public void Testar() throws Exception{
		try 
		{
			
			scan = new Scanner(System.in);
			
			socketServer = new ServerSocket(30000);
			
			socket = socketServer.accept();
			
			di = new DataInputStream(socket.getInputStream());
			
			dos = new DataOutputStream(socket.getOutputStream());
			
			LerLinhaThread TTA = new LerLinhaThread();
			Thread thA = new Thread(TTA);
			
			EnviarLinhaThread TTB = new EnviarLinhaThread();
			Thread thB = new Thread(TTB);
			
			thA.start();
			thB.start();
			thA.sleep(1);
			thB.sleep(1);
			
						
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}

	}
	class LerLinhaThread implements Runnable {
		public String linha;
		public void run() {
			while((linha = scan.next())!=null){
				if(linha != null)
					f("Servidor escreveu: ".concat(linha));
			}
		}

		public void f(String x) {
			try {
				dos.writeUTF(x);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	class EnviarLinhaThread implements Runnable {
		public String linha;
		public void run() {
			try {
				linha = di.readUTF();
				System.out.println(linha);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String args[]){
		SocketServidor t =  new SocketServidor();
		try {
			t.Testar();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}
}

Se alguém puder dar um toque e tals, esse conceito de thread ainda é bastante confuso pra mim e as documentações que ando lendo nao estão ajudando muito.
Mas, estou tentando tirar minhas duvidas na pratica…

1 Resposta

gabrielmassote

Tudo bem sephct?

pense comigo…para mandar e receber varias mensagens primeiramente voce vai ter que possui uma thread no servidor e outra no cliente que fique responsavel apenas por ler e outras duas que fiquem responsaveis por escrever…ou seja…

Servidor e cliente:

thread leitura que contenha um while e dentro um read do input e mostre em um TextArea ou System.out.println.

thread escrita que contenha um while e dentro algum TextField que escreva a mensagem.

nao sei se entendeu muito bem.

mas é que estou na faculdade e to sem tempo.
se nao cosneguir me manda um email que respondo a noite com algum codigo pra vc, ou responda aqui mesmo.

abraco

Criado 20 de maio de 2008
Ultima resposta 20 de mai. de 2008
Respostas 1
Participantes 2