今天写了一个程序,本想没什么问题,可是运行起来以后却发现是死锁。死锁发生的地方我已经用注释标明,希望各位大侠发表看法。Server端代码:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class TcpServer {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
BufferedReader reader = null;
PrintWriter writer = null; try {
// bind port 2222 and read message from client
server = new ServerSocket(2222);
socket = server.accept();
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String str = null;
while ((str = reader.readLine()) != null) { // 好像在这里readLine()没有读到值就会一直阻塞,导致客户端无法继续运行
str = reader.readLine();
System.out.println(str);
} // send message to client
writer = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()), true);
writer.println("Thanks");
writer.flush();
writer.println("bye");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
writer = null;
}
if (reader != null) {
reader.close();
reader = null;
}
if (socket != null) {
socket.close();
socket = null;
}
if (server != null) {
server.close();
server = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Client端代码:import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class TcpClient {
public static void main(String[] args) {
Socket socket = null;
PrintWriter writer = null;
BufferedReader reader = null;
try {
// connect server and send message
socket = new Socket("127.0.0.1", 2222);
writer = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()), true);
writer.println("Hello");
writer.flush();
writer.println("world" + File.separatorChar);
writer.flush();
// receive message from server
String str = null;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while((str = reader.readLine()) != null){
str = reader.readLine();
System.out.println(str);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(reader != null){
reader.close();
reader = null;
}
if (writer != null) {
writer.close();
writer = null;
}
if (socket != null) {
socket.close();
socket = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class TcpServer {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
BufferedReader reader = null;
PrintWriter writer = null; try {
// bind port 2222 and read message from client
server = new ServerSocket(2222);
socket = server.accept();
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String str = null;
while ((str = reader.readLine()) != null) { // 好像在这里readLine()没有读到值就会一直阻塞,导致客户端无法继续运行
str = reader.readLine();
System.out.println(str);
} // send message to client
writer = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()), true);
writer.println("Thanks");
writer.flush();
writer.println("bye");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
writer = null;
}
if (reader != null) {
reader.close();
reader = null;
}
if (socket != null) {
socket.close();
socket = null;
}
if (server != null) {
server.close();
server = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Client端代码:import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class TcpClient {
public static void main(String[] args) {
Socket socket = null;
PrintWriter writer = null;
BufferedReader reader = null;
try {
// connect server and send message
socket = new Socket("127.0.0.1", 2222);
writer = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()), true);
writer.println("Hello");
writer.flush();
writer.println("world" + File.separatorChar);
writer.flush();
// receive message from server
String str = null;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while((str = reader.readLine()) != null){
str = reader.readLine();
System.out.println(str);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(reader != null){
reader.close();
reader = null;
}
if (writer != null) {
writer.close();
writer = null;
}
if (socket != null) {
socket.close();
socket = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
package test.io;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class TcpServer {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
BufferedReader reader = null;
PrintWriter writer = null; try {
// bind port 2222 and read message from client
server = new ServerSocket(2222);
socket = server.accept();
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String str = null;
while ((str = reader.readLine()) != null) { // 好像在这里readLine()没有读到值就会一直阻塞,导致客户端无法继续运行
System.out.println(str);
} // send message to client
writer = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()), true);
writer.println("Thanks");
writer.flush();
writer.println("bye");
socket.shutdownOutput();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
writer = null;
}
if (reader != null) {
reader.close();
reader = null;
}
if (socket != null) {
socket.close();
socket = null;
}
if (server != null) {
server.close();
server = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package test.io;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class TcpClient {
public static void main(String[] args) {
Socket socket = null;
PrintWriter writer = null;
BufferedReader reader = null;
try {
// connect server and send message
socket = new Socket("127.0.0.1", 2222);
writer = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()), true);
writer.println("Hello");
writer.flush();
writer.println("world");
writer.flush();
socket.shutdownOutput();
// receive message from server
String str = null;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while((str = reader.readLine()) != null){
System.out.println(str);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(reader != null){
reader.close();
reader = null;
}
if (writer != null) {
writer.close();
writer = null;
}
if (socket != null) {
socket.close();
socket = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
while((str = reader.readLine()) != null){
//str = reader.readLine();
System.out.println(str);
}