Socket - mandar e receber na mesma porta

Quem puder me ajudar. O erro parace meio bobo, mas é o seguinte, eu tenho que enviar uma mensagem (string) e aguardar a resposta na mesma porta.

Tentei dar close e até shutdown no cliente, mas continuo recebendo a mensagem de

estou fazendo algo assim:

Socket cliente = new Socket("127.0.0.1", 8030);
PrintWriter out = new PrintWriter(cliente.getOutputStream(), true);
out.println("mensagem dddd");
cliente.close();
...
ServerSocket servidor = new ServerSocket(8030);
Socket cliente = servidor.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(
						cliente.getInputStream()));
String linha;
while (true) {
		linha = in.readLine();
		      if (linha == null) {
		break;
		}
	}

Você está tentando fazer um programa cliente ou servidor?

Dica: se seu programa é só um cliente, ele deve ter a seguinte estrutura:

import java.net.*;
import java.io.*;

class Cliente {
    public static void main(String[] args) throws Exception {
        String endereco = "127.0.0.1";
        int porta = 7; // estou usando o serviço "echo" que normalmente existe no Unix e pode
        // ser ativado no Windows iniciando o serviço "Simple TCP/IP Services"
        Socket s = new Socket (endereco, porta);
        PrintWriter pw = new PrintWriter (s.getOutputStream(), true /*autoflush*/);
        BufferedReader br = new BufferedReader (new InputStreamReader (s.getInputStream()));
        String linha;
        //-- este é apenas um teste. 
        long t = System.currentTimeMillis();
        pw.println ("Teste - t = 0");
        while ((linha = br.readLine()) != null) {
            System.out.println (linha);
            pw.println ("Teste - t = " + (System.currentTimeMillis() - t));
            try { Thread.sleep (2000); } catch (InterruptedException ex) {}
        }
        pw.close();
        br.close();
    }
}

É um cliente. Seu exemplo está perfeito.