站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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();
}

}


学习


↑返回目录
前一篇: 编写从键盘读入10个字符放入一个字符数组,并在屏幕上显示它们的程序.
后一篇: 请问:jstl的标签可否对对像集合进行操作?