Te entiendo, el problema es que no se me ocurre como ¿?
Por cierto la linea de quien recibe esta bien?
Pues tienes que ir leyendo líneas del archivo con un bucle while y enviar cada una por separado. Cuando detectes que has llegado al fin del fichero tienes que enviar /. y listo.
El segundo el planteamiento lo veo bien, pero no te puedo ayudar mucho más porque usas clases que no he visto nunca como PrintWriter y tendría que repasar programación con sockets. De todas formas te paso un código de ejemplo de cliente/servidor en UDP para "inspirarte" un poco.
Cliente:
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
Servidor:
import java.io.*;
import java.net.*;
class UDPServer {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}
}
El cliente envia una línea que introduce el usuario y espera recibirla por parte del servidor en mayúsculas. No tiene mucho que ver con tu ejercicio porque no intervienen ficheros, pero quizás te sirva de ayuda. Un saludo.