Enviando por Sockets[RESOLVIDO]

Eu posso mandar Objects por uma socket ou só Strings?

e outra como eu sei pra qm to mandando eu usei um tuto da sun pra recebe mais de um cliente mas quando digito no server não sei quem vai recebe pq uma hora é um depois outra dai nao amnda pra ninguem dia na proxima entrada manda um pra cada

Alguém??
Obrigado

Por favor alguém sabe me esclarecer essas duvidas??

[quote=Mark_Ameba]Eu posso mandar Objects por uma socket ou só Strings?

e outra como eu sei pra qm to mandando eu usei um tuto da sun pra recebe mais de um cliente mas quando digito no server não sei quem vai recebe pq uma hora é um depois outra dai nao amnda pra ninguem dia na proxima entrada manda um pra cada

Alguém??
Obrigado[/quote]

  1. Você consegue mandar bytes pelo Socket. Se esses bytes representam um Objeto java ou Strings, cabe ao lado que recebe os bytes interpretar direito esses bytes. Então, de certa forma, você consegue enviar Objetos java e/ou Strings por Socket.
  2. Cada objeto Socket representa uma conexão TCP, estabelecida ou não, exceto no caso dos DatagramSockets, que não precisam de conexão por usarem UDP. Então, cada objeto Socket representaria o canal de comunicação com outro dispositivo remoto. Se não for isso que tu pediu para entender, então reformula aí a pergunta porque me parece muito confuso.

Inté.

Desculpa pela confusão mais é assim:
Tenho uma classe que implemente Runnable que trata minhas conexões com o ServerSocket
mas dai eu não sei pra quem eu vou mandar uma mensagem as vezes as mensagens são enviadas para um depois para outro e queria sabe se tenho como manda pra um endereço especifico conectado no servidor e como sabe quem é que ta conectado

espero ter esclarecido minha duvida

to dando um up para não abir um novo tópico

eu continuo com o problema(na época não era realmente preciso)

o meu caso é o seguinte

o que quero é
o cliente conecta(façil ^^)
dai no while
envia uma String para o server
recebe um objeto do tipo Graphics2D(aqui esta o problema)
como consigo enviar um objeto do server para o socket
e como eu interpreto no socket

eu vi algo sobre o DataInputStream e DataOutputStream
mas como converto Graphics pra bytes e como interpreto pra Graphics o DataInput?

Você pode usar as classes:

ObjectInputStream e ObjectOutputStream

Exemplo simples de uso:

Socket socket = new Socket(host, port);
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

//sending an object
socket.writeObject(new Customer());

//receiving an object
Customer c = (Customer)socket.readObject();

//closing connection
in.close();
out.close();
socket.close();

Cara muito obrigado
depois de dois meses me vem a solução
:smiley:

http://www.google.com/search?q=java+socket+"send+an+object"
http://java.sun.com/developer/technicalArticles/ALT/sockets/
http://forum.java.sun.com/thread.jspa?threadID=628110&messageID=3599205
:smiley:

Olá

Fora o google, nem se lembrou de procurar no javadoc?

[]s
Luca

[quote=Luca]
Olá

Mark_Ameba wrote:

depois de dois meses me vem a solução

Fora o google, nem se lembrou de procurar no javadoc?

[]s
Luca[/quote]

Eu postei aquela vez pq sabia que ia usar pra frente, procurei no google e nada, não era necessario decedi esperar deixar de lado
dai vem um mes de ferias e não procurei de saber mais nada
mais agora eu preciso por isso a duvida

alias no Javadoc eu tinha visto sobre o DataImputStream e DataOutputStream mas não tinha intendido como com o Imput retornaria um objeto denovomas foi erro meu não ter visto ObjectImput e Output

EStou tendo que enviar instâncias de Object por socket e já estava fazendo parecido com o código postado aqui. O servidor e o cliente se contactam, entram no loop de troca de mensagens, mas o Object não é enviado, o programa simplesmente para. Alguma sugestão?

for(int i = 0; i< tamRajada; i++)
{
System.out.println("loop: " +i);
try
{
//Pega o tempo em que comunicação começa
tempoEnv = System.nanoTime();
System.out.println("pegou o tempo: ");
System.out.println("VAi enviar a msg "); //O programa congela depois dessa linha
objOut.writeObject(msgEnv);
System.out.println("Enviou a msg ");
msgRec = objIn.readObject(); //recebe a resposta do cliente

		//Pega o tempo em que a comunicação termina
		tempoRec = System.nanoTime();
		//Tempo total da comunicação
		tempoTot = tempoRec - tempoEnv;
		getEscritor().println(tempoTot);
		}
		catch(ClassNotFoundException e)
		{
		}	
	}

[quote=leonardom]Você pode usar as classes:

ObjectInputStream e ObjectOutputStream

Exemplo simples de uso:

[code]
Socket socket = new Socket(host, port);
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

//sending an object
socket.writeObject(new Customer());

//receiving an object
Customer c = (Customer)socket.readObject();

//closing connection
in.close();
out.close();
socket.close();
[/code][/quote]

Muito obrigado pela ajuda leonardom eu estava com a mesma que o Mark_Ameba , e quando eu fui usar o código que você passo eu notei que o método writeObject() que é usado para enviar o objeto não esta relacionado com o socket mais sim com o fluxo de saída de dados o ObjectOutputStream , o mesmo se aplica ao método readObject(). Então ficaria assim o seu exemplo.

Socket socket = new Socket(host, port);
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

//sending an object
out.writeObject(new Customer());

//receiving an object
Customer c = (Customer)in.readObject();

//closing connection
in.close();
out.close();
socket.close();

ps.: alguem me corrija se eu estiver errado por favor !!!