всем! Я пытаюсь сделать свою первую Java-аппликацию с помощью Sockets. И у меня проблемы с чтением из Socket. Вот исходный код для ServerThread:Не удается прочитать с Socket
public class ServerThread extends Thread{
private final int SERVER_PORT = 444;
private ServerSocket serv;
public ServerThread(){
try {
serv = new ServerSocket(SERVER_PORT);
} catch (IOException ex) {
Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run(){
while(true){
try {
Socket client = serv.accept();
client.setSoTimeout(0);
client.setTcpNoDelay(true);
client.setSendBufferSize(65536);
if(client.isConnected()){
new Thread(new MsgSrv(client)).start();
System.out.println("Client connected");
}
} catch (IOException ex) {
Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
} }
А вот для класса, который обрабатывает клиентские соединения:
public class MsgSrv extends Thread{
private BufferedWriter out;
private BufferedReader in;
private boolean isFinished = false;
private String buff;
private Socket sock;
public MsgSrv(Socket sc){
try {
sock = sc;
in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(sc.getOutputStream()));
} catch (IOException ex) {
Logger.getLogger(MsgSrv.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void run(){
while(!isFinished){
try {
buff=in.readLine();
System.out.println(buff);
out.write("Hello");
} catch (IOException ex) {
Logger.getLogger(MsgSrv.class.getName()).log(Level.SEVERE, null, ex);
isFinished=true;
}
}
}}
клиентское приложение отправляет строку на сервер, и пытается прочитать ответ , Но ничего не происходит. in.readLine
ничего не возвращает и ждет ответа с сервера навсегда. Можете ли вы помочь мне решить проблему? Для чтения данных я уже использовал классы DataInputStream, BufferedReader. Источник для клиентского приложения:
public class JavaApplication4 {
/**
* @param args the command line arguments
*/
public static Socket connectSock;
public static PrintWriter out;
public static DataInputStream in;
public static void main(String[] args) {
try {
connectSock = new Socket("127.0.0.1", 444);
if(connectSock.isConnected()){
in = new DataInputStream(connectSock.getInputStream());
out = new PrintWriter(connectSock.getOutputStream(), true);
out.println("!hello!");
out.flush();
String s;
while(true){
s = in.readUTF();
System.out.println(s);
}
}else
{
System.out.println("bad socket");
System.exit(0);
}
} catch (UnknownHostException ex) {
Logger.getLogger(JavaApplication4.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(JavaApplication4.class.getName()).log(Level.SEVERE, null, ex);
}
}}
Тестирование 'isConnected()' также бессмысленно. Сокет не может быть подключен в этих точках. – EJP
Нет проблем с методом isConnected. Сервер получает строку от клиента и печатает ее на консоли. Но клиент не может получить строку с сервера. – balamutik
Мое замечание было комментарием, а не ответом. Вызов этого метода в этих местах остается бессмысленным. Не пишите бессмысленный код. Это просто путает проблему. – EJP