TCP通信_发送端数据来自键盘录入
要求如下 客户端:数据来自于键盘录入,直到输入的数据是end,则发送端停止运行 服务器:接收到的数据在控制台输出
TCP通信_发送端数据来自键盘录入的练习
xxxxxxxxxx
package 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();
}
}
xxxxxxxxxx
package 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通信_发送端数据来自文本文件的练习
xxxxxxxxxx
package 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都释放
}
}
xxxxxxxxxx
package 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都需要释放资源
}
}