El servidor debe instanciar la clase java.net.ServerSocket con el puerto a conectar, de esta instancia obtienes un objeto java.net.Socket con el método accept(), al momento que alguien se conecte, con el método getOutputStream del Socket obtienes un objeto java.io.ObjectOutputStream, con el cual puedes usar el método writeObject para escribir objectos que recibirá el cliente.
El cliente debe instanciar Socket, deberá recibir como primer argumento la ip del servidor y como segundo argumento el puerto por donde se realizará la conexion, (debe ser el mismo que usa el server)
Para ambos sockets con los método getOutputStream y getInputStream se recibe un objeto ObjectOutputStream y ObjectInputStream respectivamente.
Te dejo un programa ejemplo que se conecta a tu propio pc:
Main: (primero lo ejecutas como server, para esto llamas al metodo s(), luego para instanciar cliente el main llama a c())
package sockets;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import javax.swing.*;
public class Main {
public static void main
(String[] args
) {
s(); // la segunda vez que lo ejecutas llama a c();
}
static void s(){
Server s=new Server();
}
static void c(){
Client c=new Client();
}
}
Server:
package sockets;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import javax.swing.JOptionPane;
public class Server {
Server(){
try {
s = ss.accept();
oos.writeObject("Hello Socket");
close();
}
close();
}
void close(){
try {
s.close();
ss.close();
}
}
void read(){
try{
e.printStackTrace();
}
}
}
Cliente:
package sockets;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import java.util.Scanner;
import javax.swing.*;
public class Client {
Client(){
try{
s
=new Socket("localhost",
9999);
}
}
}
(Funcionará siempre y cuando no tengas el puerto 9999 ocupado
)
Saludos!