TCP通信_发送端数据来自键盘录入
要求如下 客户端:数据来自于键盘录入,直到输入的数据是end,则发送端停止运行 服务器:接收到的数据在控制台输出
TCP通信_发送端数据来自键盘录入的练习
xxxxxxxxxxpackage ch22;
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;
//如何运行:先运行"a_12_2测试_接收"再运行"a_12_1测试_发送"public class a_12_1测试_发送 {
public static void main(String[] args) throws IOException {
//创建发送端Socket对象 Socket s = new Socket("10.99.20.3",11112);
//数据来自键盘录入,直到输入的数据是end,则发送端停止运行 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//封装输出流对象。把拿到的s.getOutputStream()字节输出流,转换为OutputStreamWriter字符输出流 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line; while((line=br.readLine())!=null){ if("end".equals(line)){ break; }
//如果不是输入end的话,就把输入的数据都发送出去。获取输出流对象 /*OutputStream os = s.getOutputStream(); os.write(line.getBytes());//以字节数组的形式来写数据。如何一次写一个字符串,如下。别忘了把上面两行都注释掉*/
//如果不是输入end的话,就把输入的数据都发送出去。获取输出流对象。注意我们拿到的s.getOutputStream是字节流,我们需要把它转为字符流 //还要在最上面封装输出流对象 bw.write(line); bw.newLine();//换行 bw.flush();//刷新缓冲流 }
//释放资源 s.close();
}}xxxxxxxxxxpackage ch22;
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;
//如何运行:先运行"a_12_2测试_接收"再运行"a_12_1测试_发送"public class a_12_2测试_接收 {
public static void main(String[] args) throws IOException {
//创建接收端Socket对象 ServerSocket ss = new ServerSocket(11112);
//监听发送端的连接,返回一个对应的Socket对象 Socket s = ss.accept();
//获取输入流,即读数据 /*InputStream is = s.getInputStream();//注意此时s.getInputStream()是字节输入流 //因为我们已经在发送端使用了BufferedReader来写数据,一次写的是一个字符串数据,我们能在这里读数据的时候读一个字符串吗,如下 //使用InputStreamReader把s.getInputStream()字节输入流来包装成或叫转换成BufferedReader字符输入流 InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr);*/ //上面那3行代码可以合并优化一下,如下 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); String line; while((line=br.readLine())!=null){ //只有转换为字符输入流后,才能使用readLine()方法 System.out.println(line); }
//释放资源 ss.close();
}}
TCP通信_发送端数据来自文本文件
要求如下 客户端:数据来自于文本文件,客户端即发送端 服务器:接收到的数据写入文本文件,服务端即接收端
注意:发送端的数据来自'a_13_3文本.txt',接收端的数据会写入到'a_14_3文本.txt' 注意:'a_13_3文本.txt'是已存在的,'a_14_3文本.txt'是系统帮我们创建的
相当于实现了文件上传,即把你的文件发给你的同桌
TCP通信_发送端数据来自文本文件的练习
xxxxxxxxxxpackage ch22;
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 a_14_1测试_发送 {
public static void main(String[] args) throws IOException {
//创建发送端Socket对象 Socket s = new Socket("10.99.20.3",11114);
//把要发送的文本文件数据先封装一下 BufferedReader br = new BufferedReader(new FileReader("D:\\huanf\\java\\src\\ch22\\a_13_3文本.txt"));
//封装输出流写数据 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//读取要发送的数据,并且把读到的数据发生出去 String line; while((line=br.readLine())!=null){ bw.write(line); bw.newLine(); bw.flush(); }
//释放资源 br.close(); s.close(); //注意:要把br和s都释放
}}xxxxxxxxxxpackage ch22;
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 a_14_2测试_接收 {
public static void main(String[] args) throws IOException {
//创建接收端Socket对象 ServerSocket ss = new ServerSocket(11114);
//监听发送端的连接,返回一个对应的Socket对象 Socket s = ss.accept();
//接收数据 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); //用FileWriter来实现把数据写到文本文件,即需要把FileWriter包装成BufferWriter BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\huanf\\java\\src\\ch22\\a_14_3文本.txt"));//目标路径
//读写操作 String line; while((line=br.readLine())!=null){ bw.write(line); bw.newLine(); bw.flush(); }
//释放资源 bw.close(); ss.close(); //注意ss和bw都需要释放资源
}}