java socket Inputstream, PrintWriter 不工作
java socket Inputstream, PrintWriter doesn't work
我试图制作一个服务器和客户端来相互发送简单的消息,但效果不佳。
当我调试每一方时,从服务器向客户端发送消息后,客户端将"hi "放入PrintWriter
,然后客户端完成,但服务器无法读取"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
您的服务器需要一个以换行符结尾的字符串,因此您需要替换
pw.print(hi);
在您的客户端中 pw.println(hi);
我试图制作一个服务器和客户端来相互发送简单的消息,但效果不佳。
当我调试每一方时,从服务器向客户端发送消息后,客户端将"hi "放入PrintWriter
,然后客户端完成,但服务器无法读取"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
您的服务器需要一个以换行符结尾的字符串,因此您需要替换
pw.print(hi);
在您的客户端中 pw.println(hi);