== 有错误请指出联系QQ:1074953453==
总结写在前面:(有异常请检查总结)
1.关闭所有流(按照正常的顺序)
2.遇到死锁注意:字符流的使用是否正确
Server端:
package Socket2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
Server s = new Server();
s.Collection();
}
/**
* 建立连接
*/
private void Collection() {
//创建服务端对象
ServerSocket ss;
try {
//创建连接对象,必须指定端口号,且要和服务端端口号保持一致
ss = new ServerSocket(12345);
//服务端开启等待连接状态
Socket s = ss.accept();
//通过Socket对象获取文件操作流
copyClient(s);
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**复制客户端的文本文件
* @param s 服务器对象
* @throws IOException
*/
private void copyClient(Socket s) throws IOException {
File file = null;
PrintWriter os = null;
//获取网络输入流:理解为可直接读取到的客户端的文件内容
//返回为字节流,使用转换流InputStreamReader来转换为字符流
InputStream is = s.getInputStream();
Reader r = new InputStreamReader(is);
//使用缓冲流包装对象
BufferedReader br = new BufferedReader(r);
try {
//创建写的对象
file = new File("D:\\dow.txt");
os = new PrintWriter(file);
//从客户端下载txt文件
String str = br.readLine();
while (str != null ) {
//注意刷新缓冲流
os.println(str);
os.flush();
str=br.readLine();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
br.close();
r.close();
is.close();
}
}
Client端
package Socket2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
File file =new File("D:\\tst1.txt");
Socket so = null;
OutputStream os = null;
try {
so = new Socket("127.0.0.1",12345);
os = so.getOutputStream();
FileReader readLocal = new FileReader(file);
forCopy(os, readLocal);
os.close();
so.close();
}catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param os
* @param readLocal
*/
private static void forCopy(OutputStream os, FileReader readLocal) {
BufferedReader br = new BufferedReader(readLocal);
Writer writer = new OutputStreamWriter(os);
PrintWriter bw = new PrintWriter(writer,true);
String str = null;
try {
str = br.readLine();
while (str != null) {
bw.println(str);
bw.flush();
str = br.readLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
两边的写法基本一致!!