110,561
社区成员
发帖
与我相关
我的任务
分享
客户端
public class clientDemo07 { public static void main(String[] args) throws IOException { //TCP协议 需要经过三次握手 四次挥手 //客户端先给服务端发送请求 等待服务端响应 //服务端接收到以后 给客户端一个反馈 表示接收到了 //客户端再次向服务端发送连接请求 确认连接 //1.创建Socket类对象 带参构造方法 (String host,int port) //创建流套接字并将其连接到指定主机上的指定端口号 Socket socket = new Socket("127.0.0.1", 10064); //2.使用Socket类中的getOutputStream()方法 返回一个字节输出流对象 网络中的流 OutputStream os = socket.getOutputStream(); //普通字节流传输速度慢 创建字节缓冲流 进行转换 BufferedOutputStream bos = new BufferedOutputStream(os); //3.创建字节缓冲输入流 进行读取本地的文件 本地中的流 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\jdk1.8.rar")); //4.声明一个变量 int variable; //循环 while ((variable = bis.read()) != -1) { //写数据 bos.write(variable); } //read()方法不仅具有读的功能 同时具有阻塞功能 //当客户端把数据传输到服务端以后 服务端并没有读完毕 因为没有给任何的标记 //所以 需要给服务端一个标记语句 //使用Socket类中的shutdownOutput()方法 暂时关闭输出流 //给服务器一个结束标记 告诉服务器文件已经传输完毕 socket.shutdownOutput(); //当客户端给服务端发送一个数据以后 //服务端会给客户端一个反馈 //表示确认收到数据 //创建字节输入流 进行接收 //使用Socket类中的getInputStream()方法 返回一个字节输入流 InputStream is = socket.getInputStream(); //如果服务端使用字符流进行传输数据 那么客户端接收到反馈以后就会报错 乱码 //字符+符号 那么读取就会报错 //所以需要使用字符流 进行接收 //但是Socket类中并没有返回字符流的方法 ? //使用转换流进行转换 BufferedReader br = new BufferedReader(new InputStreamReader(is)); //接收数据 //声明一个变量 String line; //循环 接收数据 //因为String类是对象 并不是基本数据类型 所以默认值为null while ((line = br.readLine()) != null) { //输出 System.out.println(line); } //最后一步 //释放资源 //注意释放顺序 br.close(); bis.close(); os.close(); socket.close(); } }
服务端
public class ServerDemo07 { public static void main(String[] args) throws IOException { //注意点: //先运行服务端 再运行客户端 //1.创建ServerSocket类对象 带参构造方法 (int port) //创建绑定到指定端口的服务器套接字 ServerSocket ss = new ServerSocket(10064); //2.使用ServerSocket类中的accept()方法 监听客户端的数据并接受它 并且具有阻塞功能 返回一个socket类对象 Socket socket = ss.accept(); //3.客户端发送数据以后 需要接收 //使用Socket类中的getInputStream()方法 返回一个字节输入流对象 InputStream is = socket.getInputStream(); //普通字节流传输速度慢 使用字节缓冲流 网络中的流 BufferedInputStream bis = new BufferedInputStream(is); //创建字节缓冲输出流 本地流 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\jdk.rar")); //读写数据 //声明一个变量 int variable; //循环 while ((variable = bis.read()) != -1) { //写数据 bos.write(variable); } //当接收到客户端发送的数据以后 还需要给客户端一个反馈 //创建字符缓冲输出流 转换流 OutputStreamWriter是字符流到字节流的桥梁 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //写数据 bw.write("数据上传成功 已经成功保存到本地"); //最后一步 //释放资源 //注意释放顺序 bw.close(); bos.close(); bis.close(); socket.close(); ss.close(); } }
那就去java版块问吧,这里毕竟还是不对口