socket中用outputstreamwriter包装outputstream

BDLng 2017-12-10 05:27:51
客户端:
package cn.luobida.serviceclient;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ServiceClient {

public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 8899);
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();

OutputStreamWriter writer = new OutputStreamWriter(outputStream);
writer.write("hello");
writer.flush();

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = reader.readLine();
System.out.println(line);

inputStream.close();
outputStream.close();
socket.close();

}
}


服务端:
package cn.luobida.serviceserver;

import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class ServiceServer {

public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress("localhost", 8899));

while(true){
Socket socket = server.accept();
new Thread(new ServiceServerTaskImpl(socket)).start();
}
}
}


任务处理类:

package cn.luobida.serviceserver;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.nio.CharBuffer;

public class ServiceServerTaskImpl implements Runnable{

Socket socket;
InputStream inputStream = null;
OutputStream outputStream = null;

public ServiceServerTaskImpl(Socket socket){
this.socket = socket;
}


public void run() {
try {
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();
InputStreamReader isr = new InputStreamReader(inputStream);

BufferedReader buf = new BufferedReader(new InputStreamReader(inputStream));
String line = buf.readLine();
System.out.println(line);

String string = matchmess(line);


OutputStreamWriter writer = new OutputStreamWriter(outputStream);
writer.write(string);
writer.flush();
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
inputStream.close();
outputStream.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}

private String matchmess(String line) throws Exception {
if(line.equals("hello,myname is luobida.")){
return "i recive ,luobida";
}
return "erro";

}

}



出现的问题:
客户端启动后,并且发送消息,但是服务端无法收到消息,卡在String line = buf.readLine();
...全文
321 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
BDLng 2018-01-24
  • 打赏
  • 举报
回复
已经解决了,要加入结束符号 \n
  • 打赏
  • 举报
回复
BufferedReader buf = new BufferedReader(new InputStreamReader(inputStream)); 改成这样的 BufferedReader buf = new BufferedReader(isr );

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧