已经建立连接,Server窗口显示"A client connected."
然后在Server窗口输入"Hello",但是Client窗口什么也没接收到,怎么回事呢?==[TCPServer.java]==
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(6000);
Socket s = null;
BufferedReader localBr = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = null;
BufferedReader br = null;
while(true) {
s = server.accept();
System.out.println("A client connected.");
pw = new PrintWriter(s.getOutputStream());
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String str = null;
while(true) {
str = localBr.readLine();
System.out.println("Server: " + str);
pw.write("Server: " + str);
System.out.println(br.readLine());
if(str.equalsIgnoreCase("exit")) {
break;
}
}
pw.close();
br.close();
localBr.close();
s.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("error in server");
}
}
}
==[TCPClient.java]==
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try {
Socket s = new Socket("222.90.199.75", 6000);
BufferedReader localBr = new BufferedReader(new InputStreamReader(System.in));
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream());
String str = null;
while(true) {
System.out.println(br.readLine());
str = localBr.readLine();
System.out.println(str);
pw.write(str);
if(str.equalsIgnoreCase("exit")) {
break;
}
}
br.close();
pw.close();
localBr.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后在Server窗口输入"Hello",但是Client窗口什么也没接收到,怎么回事呢?==[TCPServer.java]==
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(6000);
Socket s = null;
BufferedReader localBr = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = null;
BufferedReader br = null;
while(true) {
s = server.accept();
System.out.println("A client connected.");
pw = new PrintWriter(s.getOutputStream());
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String str = null;
while(true) {
str = localBr.readLine();
System.out.println("Server: " + str);
pw.write("Server: " + str);
System.out.println(br.readLine());
if(str.equalsIgnoreCase("exit")) {
break;
}
}
pw.close();
br.close();
localBr.close();
s.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("error in server");
}
}
}
==[TCPClient.java]==
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try {
Socket s = new Socket("222.90.199.75", 6000);
BufferedReader localBr = new BufferedReader(new InputStreamReader(System.in));
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream());
String str = null;
while(true) {
System.out.println(br.readLine());
str = localBr.readLine();
System.out.println(str);
pw.write(str);
if(str.equalsIgnoreCase("exit")) {
break;
}
}
br.close();
pw.close();
localBr.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
你是在本机上吗?还远程的呀?
写了仍旧不显示啊,之前没写的原因是PrintWriter有自动flush的功能。
pw = new PrintWriter(s.getOutputStream(),true);// 刷新缓冲区
主要是这句
把你的这句pw.write("Server: " + str);
改成这样:pw.println("Server: " + str); pw.flush();
因为你客户端要是用的readLine(),你用pw.write只是输出字符串,没有输出换行"\n"
所以客户端看不到"\n"换行,客户端就认为没有读完,所以一直阻塞在那里,所以你的客户端始终是空白.
自己和自己连 用Socket s = new Socket("127.0.0.1",6000);
不更稳吗???如果没有错误应该就是 flush;很重要啊!!!切忌java中没有小错误·大错误之分;
只有成功和失败!!!!!