当前页面: 开发资料首页 → J2SE 专题 → Socket.getInputStream()阻塞的问题——提供完整代码测试
Socket.getInputStream()阻塞的问题——提供完整代码测试
摘要: Socket.getInputStream()阻塞的问题——提供完整代码测试
运行Server和Client,都阻塞在Server(Client) Begin Get IOStream里,不会打印出Server(Client) End Get IOStream,请大家指教。
完整的代码如下:
客户端
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
public class Client extends Thread{
private Socket sk = null;
private ObjectInputStream in = null;
private ObjectOutputStream out = null;
final private int port = 8005;
public void run() {
try {
sk = new Socket("127.0.0.1", port);
System.out.println("Client Begin Get IOStream");
in = new ObjectInputStream(sk.getInputStream());
out = new ObjectOutputStream(sk.getOutputStream());
System.out.println("Client End Get IOStream");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
(new Client()).start();
}
}
务服器端
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server extends Thread{
final int port = 8005;
public void run() {
try {
ServerSocket ssk = new ServerSocket(port);
while (!ssk.isClosed() && !Thread.interrupted()) {
Socket sk = ssk.accept();
(new IOThread(sk)).start();
}
ssk.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private class IOThread extends Thread {
private Socket sk = null;
private ObjectInputStream in = null;
private ObjectOutputStream out = null;
public IOThread(Socket sk) {
this.sk = sk;
}
public void run() {
try {
System.out.println("Server Begin Get IOStream");
in = new ObjectInputStream(sk.getInputStream());
out = new ObjectOutputStream(sk.getOutputStream());
System.out.println("Server End Get IOStream");
} catch (Exception e) {
//e.printStackTrace();
}
}
}
public static void main(String[] args) {
(new Server()).start();
}
}
你的服务端和客户端,同时都在读,没有一个发送数据,你先任意一端的流交换位置就OK了
要让他们错开,
就是一个要取输入流,另一个就取输出流.
我改了一个客户端就OK了!
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
public class Client extends Thread{
private Socket sk = null;
private ObjectInputStream in = null;
private ObjectOutputStream out = null;
final private int port = 8005;
public void run() {
try {
sk = new Socket("127.0.0.1", port);
System.out.println("Client Begin Get IOStream");
out = new ObjectOutputStream(sk.getOutputStream());
in = new ObjectInputStream(sk.getInputStream());
System.out.println("Client End Get IOStream");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
(new Client()).start();
}
}
学习