我试图使服务器和客户端相互发送简单消息,但是效果不佳。
当我调试每端时,从服务器向客户端发送消息后,客户端在PrintWriter
中放入“ hi”,然后客户端完成,但是服务器无法读取“ hi”,尽管我使用了readline()。服务器为什么无法读取“ hi”?
public class Server1 {
static ServerSocket ss;
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ss=new ServerSocket(4432);
while(true)
{
Socket s=ss.accept();
System.out.println("accept for client");
function f=new function(s,ss);
f.run();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class function extends Thread{
Socket s;
ServerSocket ss;
function(Socket s,ServerSocket ss)
{
this.s=s;
this.ss=ss;
}
@Override
public void run() {
try {
PrintWriter pw=new PrintWriter(s.getOutputStream());
InputStreamReader SR=new InputStreamReader(s.getInputStream());//client가 server로부터 메세지 읽어올 stream 추가
BufferedReader reader=new BufferedReader(SR);
pw.println("hello im server");
pw.flush();
String MFC=reader.readLine();
String bb=MFC+" correct!";
System.out.println(bb);
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上面的代码是服务器端的
public class Client1 {
PrintWriter pw;
InputStreamReader cr;
static Socket s;
public static void main(String[] args) {
// TODO Auto-generated method stub
Client1 c=new Client1();
c.sck();
}
public void sck() {
try {
s=new Socket("127.0.0.1",4432);
cr=new InputStreamReader(s.getInputStream());
pw=new PrintWriter(s.getOutputStream());
BufferedReader bf=new BufferedReader(cr);
String get=bf.readLine();
System.out.println(get);
String hi="hi ";
pw.print(hi);
pw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上面的代码是客户端
我想要的结果是
[server]
accept for client
hi correct! ->this is not working
[Client]
hello im server
答案 0 :(得分:1)
您的服务器期望结尾处带有换行符的字符串,因此您需要替换
pw.print(hi);
与您的客户pw.println(hi);