为什么叫最原始,是因为不适于真正的开发环境,原始的BIO缺点很明显,这是很古老的网络编程,大家都知道,Windows下一个程序最大的线程数为1000个,而linux下也最多支持2000的线程数,先不说这种编程的内存够不够容纳一千个线程,就算可以达到1000个线程并发,但也是很少,而且这是阻塞形式的TCP网络编程模式,因此不适合真正的开发环境,这里仅为复习,下面看看代码,容后将介绍其他方式:
Client客户端:
package 网络编程_最原始;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
PrintWriter writer = null;
BufferedReader reader = null;
Socket client = null;
try {
client = new Socket("127.0.0.1", 8888);
writer = new PrintWriter(client.getOutputStream(), true);//该地方必须加true,设置为自动刷新
reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
writer.println("接收客户端发送请求");
System.out.println("请求已经发出");
String body = reader.readLine();
System.out.println(body);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (writer != null) {
writer.close();
}
if (client != null) {
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
client = null;
}
}
}
}
server服务端:
package 网络编程_最原始;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
static ServerSocket server = null;
public static void main(String[] args) {
try {
server = new ServerSocket(8888);
System.out.println("server start...");
Socket socket = server.accept();
new Thread(new HanderSocket(socket)).start();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(server!=null){
try {
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
server = null;
}
}
}
}
处理链接的任务类HanderSocket:
package 网络编程_最原始;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class HanderSocket implements Runnable{
Socket socket = null;
public HanderSocket(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader reader = null;
PrintWriter writer = null;
try {
reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
writer = new PrintWriter(this.socket.getOutputStream(),true);
String body = null;
while(true){
body = reader.readLine();
if(body == null) break;
System.out.println(body);
writer.println("你好,服务端已经接收到你的请求");
System.out.println("已经向客户端反馈结果");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(writer !=null){
writer.close();
}
if(reader !=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket = null;
}
}
}
}
输出结果:
client:
请求已经发出
你好,服务端已经接收到你的请求
server端:
server start...
接收客户端发送请求
已经向客户端反馈结果