【发布时间】:2015-05-01 21:42:57
【问题描述】:
我的输入/输出流有问题。通过 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();
}
}
}
}
以及我的客户发送消息的相关部分。
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");
【问题讨论】: