2.TCP上传文件的实现
客户端: 1.先读取(获得)文件 "123.jpg"(输入流) 2.再写入(输出)服务端文件"123.jpg";(文件输出流)
package com.Kuangstudy.Net; import java.io.*; import java.net.Socket; //客户端 public class TCPDemo1 { public static void main(String[] args) throws Exception{ //1.创建一个Socket链接 Socket socket=new Socket("127.0.0.1",9000); //2.输出信息 OutputStream outputStream=socket.getOutputStream(); //3.文件输入流 FileInputStream fileInputStream=new FileInputStream(new File("src/123.jpg"));//这样写的化是读取本idea下的文件 //4.读取文件 byte []buf=new byte[1024]; int count=0; while ((count=fileInputStream.read(buf))!=-1){ outputStream.write(buf,0,count); } //通知服务端我接收完毕 socket.shutdownOutput(); //客户端来接受信息 InputStream inputStream_one = socket.getInputStream(); int count_one=0; byte []buf_one=new byte[1024]; while ((count_one=inputStream_one.read(buf_one))!=-1){ System.out.println(new String(buf,0,count_one)); } outputStream.close(); fileInputStream.close(); } }
服务端: 1.等待服务端连接创建 2.读取(获得)客户端文件(输出流) 3.写入文件ideal中(文件写入)
package com.Kuangstudy.Net; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.Scanner; //服务端 public class TCPDemo2 { public static void main(String[] args) throws Exception{ //1.创建服务 ServerSocket serverSocket=new ServerSocket(9000); //2.监听客户端链接 Socket socket=serverSocket.accept();//阻塞或则监听,一直等待客户端链接 和Scanner一样 //3.获取输入流 InputStream inputStream=socket.getInputStream(); //4.文件输出 FileOutputStream fileOutputStream=new FileOutputStream(new File("receive.jpg")); byte[]buf=new byte[1024]; int count=0; while ((count=inputStream.read(buf))!=-1){ fileOutputStream.write(buf,0,count); } //通知客户端我传送完毕了 OutputStream outputStream_one = socket.getOutputStream(); outputStream_one.write("我已经传送完毕,服务端已关闭".getBytes(StandardCharsets.UTF_8)); serverSocket.close(); inputStream.close(); fileOutputStream.close(); } }
(六)、Tomcat
服务端: (1).自定义:(Serve) s (2).Tomcat服务器(Serve) s 客户端: (1).自定义:(Customer) c (2).浏览器:(Broeser) b
Tomcat 就是指一个服务器,我们可以自定义对服务器进行打开和关闭。
(七)、UDP
就好比如:发短信、发送导弹。(需要知道对方的地址) 1.DatagreamPacket (数据报包)
1.UDP实现消息发送
基本思路: 1.DatagramSocket 数据报套接字主要功能是: (1). 开放端口 (2). 接受报包 (3). 发送报包 2.DataframPack 数据报包的主要功能是: (1).缓存区 存储数据
接受
import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDP_dialog_two { public static void main(String[] args) throws Exception { //1.创建数据报套接字 DatagramSocket datagramSocket=new DatagramSocket(9090); //2.数据包报 //2.1 设置缓冲区 byte []buf=new byte[1024]; //2.2 DatagramPacket datagramPacket=new DatagramPacket(buf,0,buf.length); //3.数据报套接字 datagramSocket.receive(datagramPacket); System.out.println(datagramSocket.getLocalPort()+" "+datagramSocket.getInetAddress()); System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength())); //4.关闭 datagramSocket.close(); } }
发送
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDP_dialog_one { public static void main(String[] args) throws Exception { //1.通过数据报开放端口 DatagramSocket datagramSocket=new DatagramSocket(); //2.进行数据报包套接字 //2.1 信息写入 String string="你好,我是您UDP的第一个小用户!"; InetAddress inetAddress = InetAddress.getByName("127.0.0.1"); int port=9090; //2.2 把信息补充 发送给谁 DatagramPacket datagramPacket=new DatagramPacket(string.getBytes(),0,string.getBytes().length,inetAddress,port); //3.数据报传送消息 datagramSocket.send(datagramPacket); //4.关闭数据报 datagramSocket.close(); } }
2.UDP实现聊天的操作
2.1(未使用多线程单方面输入与单方面输出)
在这里插入代码片
发送者
package com.Kuangstudy.Net; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; //发送者1 public class UDPSenderDmeo1 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket=new DatagramSocket(8888); //缓冲数据: 控制台读取System.in BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in)); while (true){ //读取一行 String string_one=bufferedReader.readLine(); byte []buf=string_one.getBytes(); //打包 DatagramPacket packet=new DatagramPacket(buf,0,buf.length,new InetSocketAddress("localhost",6666)); //发送给谁? //发送包 datagramSocket.send(packet); if(buf.equals("bye")){ break; } } datagramSocket.close(); } }
接收者
package com.Kuangstudy.Net; import java.net.DatagramPacket; import java.net.DatagramSocket; //接收者1 public class UDPSenderDmeo2 { public static void main(String[] args) throws Exception { //1.接受的端口 DatagramSocket datagramSocket=new DatagramSocket(6666); while (true) { //准备接受包裹 byte[] buf = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buf, 0, buf.length ); datagramSocket.receive(datagramPacket); //阻塞接受 //断开连接 byte []buf_two=datagramPacket.getData(); //接受的数据 String string_one=new String(buf_two,0,buf_two.length); //打印输出 System.out.println(string_one.trim()); if (string_one.trim().equals("bye".trim())){ break; } } datagramSocket.close(); } }