Возникла проблема с моими входными/выходными потоками. Подключение клиента к серверу через SSL и попытка отправить сообщение с клиента на сервер.
Однако, когда я пишу в свой выходной поток, на другом конце ничего не читается.
примечание. Я запускаю свой буфер в отдельном потоке с именем sendReceive, чтобы он не блокировал основное приложение в ожидании ввода. Я передаю ему вход SSLSocket, и он потом устанавливает соответствующие потоки/буферы. Я не уверен, что здесь проблема кроется сама по себе.
Вот соответствующая часть моего сервера.
static void initializeCLAConnection(){
try {
SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =
(SSLServerSocket) sslserversocketfactory.createServerSocket(3577);
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
System.out.println("Connection accepted from: "+sslserversocket.getInetAddress());
//initialize buffer thread
sendReceive CLABuf = new sendReceive(sslsocket);
System.out.println("CLABuf established.");
CLABuf.start();
Когда вызывается CLABuf.start(), он запускает следующий поток. Здесь он никогда не достигает оператора печати «Получение ввода», независимо от того, сколько раз я пишу в поток.
public class sendReceive extends Thread{
InputStream inputstream;
InputStreamReader inputstreamreader;
BufferedReader bufferedreader;
OutputStream outputstream;
OutputStreamWriter outputstreamwriter;
BufferedWriter bufferedwriter;
public sendReceive(SSLSocket socket) throws IOException{
inputstream = socket.getInputStream();
inputstreamreader = new InputStreamReader(inputstream);
bufferedreader = new BufferedReader(inputstreamreader);
outputstream = socket.getOutputStream();
outputstreamwriter = new OutputStreamWriter(outputstream);
bufferedwriter = new BufferedWriter(outputstreamwriter);
System.out.println("CLA Buf established in new thread");
}
@Override
public void run() {
//listen to inputstream
String string=null;
while(this.isAlive()){
System.out.println("Buf running");
try {
while((string=this.bufferedreader.readLine())!=null){
System.out.println("Thread receiving input!");
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
и соответствующая часть моего клиента отправляет msg.
public void initializeVoterToCLA(){
try {
/*
* socket for Voter -> CLA
*/
SSLSocketFactory sslsocketfactoryCLA = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocketCLA = (SSLSocket) sslsocketfactoryCLA.createSocket("localhost", 3577);
InputStream inputstreamVoter = sslsocketCLA.getInputStream();
InputStreamReader inputstreamreaderVoter = new InputStreamReader(inputstreamVoter);
BufferedReader bufferedreaderVoter = new BufferedReader(inputstreamreaderVoter);
OutputStream outputstreamCLA = sslsocketCLA.getOutputStream();
OutputStreamWriter outputstreamwriterCLA = new OutputStreamWriter(outputstreamCLA);
BufferedWriter bufferedwriterCLA = new BufferedWriter(outputstreamwriterCLA);
//send msg
bufferedwriterCLA.write("test msg");