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

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

为什么叫最原始,是因为不适于真正的开发环境,原始的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模式

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.249.79.50]2022年05月24日 18时38分40秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章