Java基础-26(02)总结网络编程

c:客户端键盘录入服务器控制台输出
package cn.itcast_08;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/*
 * 客户端键盘录入,服务器输出到控制台
 */
public class ClientDemo {
 public static void main(String[] args) throws IOException {
 // 创建客户端Socket对象
 Socket s = new Socket("192.168.12.92", 22222);
 // 键盘录入数据
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 // 把通道内的流给包装一下
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
 s.getOutputStream()));
 String line = null;
 while ((line = br.readLine()) != null) {
 // 键盘录入数据要自定义结束标记
 if ("886".equals(line)) {
 break;
 }
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 // 释放资源
 // bw.close();
 // br.close();
 s.close();
 }
}
package cn.itcast_08;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
 public static void main(String[] args) throws IOException {
 // 创建服务器Socket对象
 ServerSocket ss = new ServerSocket(22222);
 // 监听客户端连接
 Socket s = ss.accept();
 // 包装通道内容的流
 BufferedReader br = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 String line = null;
 while ((line = br.readLine()) != null) {
 System.out.println(line);
 }
 // br.close();
 s.close();
 // ss.close();
 }
} 

d:客户端键盘录入服务器写到文本文件

package cn.itcast_09;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/*
 * 客户端键盘录入,服务器输出文本文件
 */
public class ClientDemo {
 public static void main(String[] args) throws IOException {
 // 创建客户端Socket对象
 Socket s = new Socket("192.168.12.92", 23456);
 // 封装键盘录入
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 // 封装通道内的数据
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
 s.getOutputStream()));
 String line = null;
 while ((line = br.readLine()) != null) {
 if ("over".equals(line)) {
 break;
 }
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 // bw.close();
 // br.close();
 s.close();
 }
}
package cn.itcast_09;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
 public static void main(String[] args) throws IOException {
 // 创建服务器Socket对象
 ServerSocket ss = new ServerSocket(23456);
 // 监听客户端连接
 Socket s = ss.accept();
 // 封装通道内的数据
 BufferedReader br = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 // 封装文本文件
 BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
 String line = null;
 while ((line = br.readLine()) != null) {
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 bw.close();
 // br.close();
 s.close();
 // ss.close();
 }
}

e:客户端读取文本文件服务器控制台输出

package cn.itcast_10;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
/*
 * 客户端文本文件,服务器输出到控制台
 */
public class ClientDemo {
 public static void main(String[] args) throws IOException {
 // 创建Socket对象
 Socket s = new Socket("192.168.12.92", 34567);
 // 封装文本文件
 BufferedReader br = new BufferedReader(new FileReader(
 "InetAddressDemo.java"));
 // 封装通道内的流
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
 s.getOutputStream()));
 String line = null;
 while ((line = br.readLine()) != null) {
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 br.close();
 s.close();
 }
}
package cn.itcast_10;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
 public static void main(String[] args) throws IOException {
 // 创建服务器Socket对象
 ServerSocket ss = new ServerSocket(34567);
 // 监听客户端连接
 Socket s = ss.accept();
 // 封装通道内的流
 BufferedReader br = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 String line = null;
 while ((line = br.readLine()) != null) {
 System.out.println(line);
 }
 s.close();
 }
} 

f:客户端读取文本文件服务器写到文本文件

package cn.itcast_11;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class UploadClient {
 public static void main(String[] args) throws IOException {
 // 创建客户端Socket对象
 Socket s = new Socket("192.168.12.92", 11111);
 // 封装文本文件
 BufferedReader br = new BufferedReader(new FileReader(
 "InetAddressDemo.java"));
 // 封装通道内流
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
 s.getOutputStream()));
 String line = null;
 while ((line = br.readLine()) != null) {
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 // 释放资源
 br.close();
 s.close();
 }
}
package cn.itcast_11;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {
 public static void main(String[] args) throws IOException {
 // 创建服务器端的Socket对象
 ServerSocket ss = new ServerSocket(11111);
 // 监听客户端连接
 Socket s = ss.accept();
 // 封装通道内的流
 BufferedReader br = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 // 封装文本文件
 BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
 String line = null;
 while ((line = br.readLine()) != null) {
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 bw.close();
 s.close();
 }
}

g:客户端读取文本文件服务器写到文本文件并给出反馈

package cn.itcast_12;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/*
 * 按照我们正常的思路加入反馈信息,结果却没反应。为什么呢?
 * 读取文本文件是可以以null作为结束信息的,但是呢,通道内是不能这样结束信息的。
 * 所以,服务器根本就不知道你结束了。而你还想服务器给你反馈。所以,就相互等待了。
 * 
 * 如何解决呢?
 * A:在多写一条数据,告诉服务器,读取到这条数据说明我就结束,你也结束吧。
 *  这样做可以解决问题,但是不好。
 * B:Socket对象提供了一种解决方案
 *  public void shutdownOutput()
 */
public class UploadClient {
 public static void main(String[] args) throws IOException {
 // 创建客户端Socket对象
 Socket s = new Socket("192.168.12.92", 11111);
 // 封装文本文件
 BufferedReader br = new BufferedReader(new FileReader(
 "InetAddressDemo.java"));
 // 封装通道内流
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
 s.getOutputStream()));
 String line = null;
 while ((line = br.readLine()) != null) { // 阻塞
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 //自定义一个结束标记
// bw.write("over");
// bw.newLine();
// bw.flush();
 //Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了
 s.shutdownOutput();
 // 接收反馈
 BufferedReader brClient = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 String client = brClient.readLine(); // 阻塞
 System.out.println(client);
 // 释放资源
 br.close();
 s.close();
 }
}
package cn.itcast_12;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {
 public static void main(String[] args) throws IOException {
 // 创建服务器端的Socket对象
 ServerSocket ss = new ServerSocket(11111);
 // 监听客户端连接
 Socket s = ss.accept();// 阻塞
 // 封装通道内的流
 BufferedReader br = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 // 封装文本文件
 BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
 String line = null;
 while ((line = br.readLine()) != null) { // 阻塞
 // if("over".equals(line)){
 // break;
 // }
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 // 给出反馈
 BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(
 s.getOutputStream()));
 bwServer.write("文件上传成功");
 bwServer.newLine();
 bwServer.flush();
 // 释放资源
 bw.close();
 s.close();
 }
}

h:TCP协议上上传图片并给出反馈

package cn.itcast_13;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class UploadClient {
 public static void main(String[] args) throws IOException {
 // 创建客户端Socket对象
 Socket s = new Socket("192.168.12.92", 19191);
 // 封装图片文件
 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
 "林青霞.jpg"));
 // 封装通道内的流
 BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
 byte[] bys = new byte[1024];
 int len = 0;
 while ((len = bis.read(bys)) != -1) {
 bos.write(bys, 0, len);
 bos.flush();
 }
 s.shutdownOutput();
 // 读取反馈
 InputStream is = s.getInputStream();
 byte[] bys2 = new byte[1024];
 int len2 = is.read(bys2);
 String client = new String(bys2, 0, len2);
 System.out.println(client);
 // 释放资源
 bis.close();
 s.close();
 }
}
package cn.itcast_13;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {
 public static void main(String[] args) throws IOException {
 // 创建服务器Socket对象
 ServerSocket ss = new ServerSocket(19191);
 // 监听客户端连接
 Socket s = ss.accept();
 // 封装通道内流
 BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
 // 封装图片文件
 BufferedOutputStream bos = new BufferedOutputStream(
 new FileOutputStream("mn.jpg"));
 byte[] bys = new byte[1024];
 int len = 0;
 while ((len = bis.read(bys)) != -1) {
 bos.write(bys, 0, len);
 bos.flush();
 }
 // 给一个反馈
 OutputStream os = s.getOutputStream();
 os.write("图片上传成功".getBytes());
 bos.close();
 s.close();
 }
}

i:多个客户端上传一个服务器思考

package cn.itcast_14;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class UploadClient {
 public static void main(String[] args) throws IOException {
 // 创建客户端Socket对象
 Socket s = new Socket("192.168.12.92", 11111);
 // 封装文本文件
 BufferedReader br = new BufferedReader(new FileReader(
 "InetAddressDemo.java"));
 // 封装通道内流
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
 s.getOutputStream()));
 String line = null;
 while ((line = br.readLine()) != null) { // 阻塞
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 // Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了
 s.shutdownOutput();
 // 接收反馈
 BufferedReader brClient = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 String client = brClient.readLine(); // 阻塞
 System.out.println(client);
 // 释放资源
 br.close();
 s.close();
 }
}
package cn.itcast_14;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/*
 * 通过while循环可以改进一个服务器接收多个客户端。
 * 但是这个是有问题的。
 * 如果是这种情况,假设我还有张三,李四,王五这三个人分别执行客户端
 * 张三:好好学习.avi(100M) 256k
 * 李四:天天向上.mp3(3M) 1M
 * 王五:ILoveJava.txt(1k) 100M
 */
public class UploadServer {
 public static void main(String[] args) throws IOException {
 // 创建服务器端的Socket对象
 ServerSocket ss = new ServerSocket(11111);
 while (true) {
 // 监听客户端连接
 Socket s = ss.accept();// 阻塞
 // 封装通道内的流
 BufferedReader br = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 // 封装文本文件
 BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
 String line = null;
 while ((line = br.readLine()) != null) { // 阻塞
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 // 给出反馈
 BufferedWriter bwServer = new BufferedWriter(
 new OutputStreamWriter(s.getOutputStream()));
 bwServer.write("文件上传成功");
 bwServer.newLine();
 bwServer.flush();
 // 释放资源
 bw.close();
 s.close();
 }
 }
}

j:多线程改进上传文件

package cn.itcast_15;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class UserThread implements Runnable {
 private Socket s;
 public UserThread(Socket s) {
 this.s = s;
 }
 @Override
 public void run() {
 try {
 // 封装通道内的流
 BufferedReader br = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 // 封装文本文件
 // BufferedWriter bw = new BufferedWriter(new
 // FileWriter("Copy.java"));
 // 为了防止名称冲突
 String newName = System.currentTimeMillis() + ".java";
 BufferedWriter bw = new BufferedWriter(new FileWriter(newName));
 String line = null;
 while ((line = br.readLine()) != null) { // 阻塞
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 // 给出反馈
 BufferedWriter bwServer = new BufferedWriter(
 new OutputStreamWriter(s.getOutputStream()));
 bwServer.write("文件上传成功");
 bwServer.newLine();
 bwServer.flush();
 // 释放资源
 bw.close();
 s.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
}
package cn.itcast_15;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class UploadClient {
 public static void main(String[] args) throws IOException {
 // 创建客户端Socket对象
 Socket s = new Socket("192.168.12.92", 11111);
 // 封装文本文件
 // BufferedReader br = new BufferedReader(new FileReader(
 // "InetAddressDemo.java"));
 BufferedReader br = new BufferedReader(new FileReader(
 "ReceiveDemo.java"));
 // 封装通道内流
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
 s.getOutputStream()));
 String line = null;
 while ((line = br.readLine()) != null) { // 阻塞
 bw.write(line);
 bw.newLine();
 bw.flush();
 }
 // Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了
 s.shutdownOutput();
 // 接收反馈
 BufferedReader brClient = new BufferedReader(new InputStreamReader(
 s.getInputStream()));
 String client = brClient.readLine(); // 阻塞
 System.out.println(client);
 // 释放资源
 br.close();
 s.close();
 }
}
package cn.itcast_15;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {
 public static void main(String[] args) throws IOException {
 // 创建服务器Socket对象
 ServerSocket ss = new ServerSocket(11111);
 while (true) {
 Socket s = ss.accept();
 new Thread(new UserThread(s)).start();
 }
 }
}

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2016-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编舟记

一步步编写SonarQube Plugin

插件确实不好写,因为插件是插入庞大的系统当中工作的,那也就意味着写插件需要具备一定的领域知识,包括系统架构、扩展点、业务共性及差异、API及其业务模型对应、安装...

89730
来自专栏晓晨的专栏

.NET Core 实现定时抓取博客园首页文章信息并发送到邮箱

9630
来自专栏JMCui

Java 原生网络编程.

    Java 语言从其诞生开始,就和网络紧密联系在一起。在 1995 年的 Sun World 大会上,当时占浏览器市场份额绝对领先的网景公司宣布在浏览器中...

11920
来自专栏along的开发之旅

图解JSP运行原理和过程

下面代码通过注解来处理/hello的请求, 并在代码中将请求转发到上述hello.jsp.

12610
来自专栏Android干货

浅谈Kotlin(一):简介及Android Studio中配置

19640
来自专栏hbbliyong

EXTJS4 Grid Filter 插件的使用 与后台数据解析------Extjs 查询筛选功能的实现

  先汗一个,一个小功能又踢腾了一天。本来这个带Demo的,但是上面介绍的不是很详细。用的时候问题不大,主要问题在文件导入方面.以为这个插件的使用和其他的不一样...

32850
来自专栏IT杂记

使用Nginx代理thrift NIO实现SSL链路加密

1 目标说明 1.1 调研目的 本次调研主要为了解决两个问题: thrift提供的SSL API只支持BIO(阻塞式IO),而我们使用的是NIO API,希望能...

1.6K70
来自专栏前端儿

<!DOCTYPE> 的理解

     今天被问道“有没有仔细了解过<!DOCTYPE>标签?”,愣了一下,因为一开始在W3cschool上看到过建议使用XHTML Transitional...

12320
来自专栏生信宝典

OrthoMCL鉴定物种同源基因 (安装+使用)

1.2K70
来自专栏java达人

java 处理xml的三种技术

最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩...

25850

扫码关注云+社区

领取腾讯云代金券