网络编程复习(一):最原始的BIO网络编程
发布日期:2021-11-13 10:21:47 浏览次数:16 分类:技术文章

本文共 3086 字,大约阅读时间需要 10 分钟。

为什么叫最原始,是因为不适于真正的开发环境,原始的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...接收客户端发送请求已经向客户端反馈结果

转载地址:https://blog.csdn.net/Lee_Ho_/article/details/78117797 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:网络编程复习(二):JDK1.5之前的伪异步BIO编程
下一篇:并发编程复习(十):master和worker模式

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月17日 08时20分42秒