package 黑马面试编程;
//=================================客户端========================
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class Client {
// 、使用TCP协议写一个可以上传文件的服务器和客户端。
// 两个类 客户端类,,,服务器类,,用字节输流控制,所有的东西都可以传了,
public static void main(String[] args) throws IOException {
Socket socket = new Socket(InetAddress.getLocalHost(), 8888); // 需要指定ip和端口
// 向服务器的输出流
OutputStream os = socket.getOutputStream();
// 从电脑需要上传的文件的输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
"gjp.jpg"));
// 边度边写
int len = 0;
byte[] b = new byte[1024 * 8];
while ((len = bis.read(b)) != -1) {
os.write(b, 0, len);
}
bis.close();
// 暂时关闭输出流,不然不知道什么时候输入完成 了
socket.shutdownOutput();
InputStream is = socket.getInputStream();
// 边度边写
int len1 = 0;
byte[] b2 = new byte[1024 * 8];
len1 = is.read(b2);
String string = new String(b2, 0, len1);
// 获取数据后将数据读出到控制台
System.out.println(string);
is.close();
os.close();
socket.close();
}
}
//================服务器端================================
package 黑马面试编程;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
// 服务器
final ServerSocket ss = new ServerSocket(8888);
// 循环接收,,因为服务器不会停
// 解决并发问题----匿名内部类 开 线程
new Thread(){
public void run() {
while(true){
try {
Socket accept = ss.accept();
InputStream is = accept.getInputStream();
// 向服务器硬盘输出的输出流,。还是字节流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(System.currentTimeMillis()+"aaa.jpg"));
// 边度边写
int len=0;
byte[] b=new byte[1024*8];
while((len=is.read(b))!=-1){
bos.write(b, 0, len);
}
// 输出一句话
// 关闭向服务器硬盘输出的输出流bos
bos.close();
// ----------------------------------------->转战客户端
// 向客户端输出一句话
// 建立输出流
OutputStream os = accept.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.print("上传成功");
ps.close();
} catch (FileNotFoundException e) {
//
throw new RuntimeException("找不到文件");
} catch (IOException e) {
throw new RuntimeException("输入输出流出错");
}
}
};
}.start();
// os.close();
// accept.close();
// ss.close();
//
}
}
|
|