网络编程(完结)

文件上传

服务器:

 package bitter02;
 ​
 import java.io.*;
 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;
 ​
 public class TcpClientDemo02 {
     public static void main(String[] args) throws Exception {
         //1.创建服务器
         ServerSocket serverSocket = new ServerSocket(9000);
         //2.监听客户端的连接
         Socket socket = serverSocket.accept();//阻塞式监听,会一直等待客户端连接
         //3.获取输入流
         InputStream is = socket.getInputStream();
         //4.文件输出
         FileOutputStream fos = new FileOutputStream(new File("recerve.jpg"));
         byte[] buffer = new byte[1024];//创建一个缓冲流
         int len;
         while((len = is.read(buffer)) != -1){
             fos.write(buffer,0,len);
         }
 ​
         //通知客户端我接收完毕了
         OutputStream os = socket.getOutputStream();
         os.write("我接收完毕了,可以断开了".getBytes(StandardCharsets.UTF_8));
 ​
 ​
         //5.关闭资源
         fos.close();
         is.close();
         socket.close();
         serverSocket.close();
     }
 }
 ​

客户端:

 package bitter02;
 ​
 import java.io.*;
 import java.net.InetAddress;
 import java.net.Socket;
 ​
 public class TcpClientDemo01 {
     public static void main(String[] args) throws Exception {
         //1.创建一个Socket连接
         Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
         //2.创建一个输出流
         OutputStream os = socket.getOutputStream();
         //3.读取文件
         FileInputStream fis = new FileInputStream(new File("1.jpg"));
         //4.写出文件
         byte[] buffer = new byte[1024];
         int len;
         while((len= fis.read(buffer)) != -1){
             os.write(buffer,0,len);
         }
         //通知服务器 我已接收完毕
         socket.shutdownOutput();//我已经传输完了
 ​
 ​
         //确定服务器接收完毕,才能够断开连接
         InputStream is = socket.getInputStream();
         //String  byte[]
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
 ​
         byte[] buffer2 = new byte[1024];
         int len2;
         while ((len2 = is.read(buffer2)) != -1) {
             baos.write(buffer2,0,len2);
         }
         System.out.println(baos.toString());
         //5.关闭资源'
         baos.close();
         is.close();
         fis.close();
         os.close();
         socket.close();
     }
 }
 ​

Tomcat

服务端:

  • 自定义 S

  • Tomcat服务器S :Java后台开发

客户端:

  • 自定义 C

  • 游览器 B

UDP

发短信:不用连接,需要知道对方的地址!

发送端:发送消息

 package bitter03;
 //不需要连接服务器
 ​
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetAddress;
 import java.nio.charset.StandardCharsets;
 ​
 public class UdpCliient_01 {
     public static void main(String[] args) throws Exception {
         //1. 建立一个Socket
         DatagramSocket socket = new DatagramSocket();
         
         //2.建个包
         String meg = "你好啊,服务器!";
         //发送给谁
         InetAddress localhost = InetAddress.getByName("localhost");
         int port = 9090;
         //数据,数据的长度起始,要发送给谁
         DatagramPacket packet = new DatagramPacket(meg.getBytes(),0,meg.getBytes().length,localhost,port);
         //3.发送包
         socket.send(packet);
         //4.关闭流
         socket.close();
     }
 }
 ​

接收端:

 package bitter03;
 ​
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 //还是要等待客户端的连接
 public class UdpServer {
     public static void main(String[] args) throws Exception {
         //开放端口
         DatagramSocket socket = new DatagramSocket(9090);
         //接收数据
         byte[] buffer = new byte[1024];
         DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);//接收就行
         socket.receive(packet);//阻塞接收
         System.out.println(packet.getAddress().getHostAddress());
         System.out.println(new String(packet.getData(),0,packet.getLength()));
 ​
         //关闭
         socket.close();
     }
 }
 ​

咨询

发送方:循环发送消息

 package chat;
 ​
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetSocketAddress;
 ​
 public class UdpSender_1 {
     public static void main(String[] args) throws Exception{
         DatagramSocket socket = new DatagramSocket(8888);
         //准备数据:控制台读取 System.in
         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
         while(true){
             String data = reader.readLine();
             byte[] datas = data.getBytes();
             DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
             socket.send(packet);
             if(data.equals("bye")){
                 break;
             }
         }
 ​
 ​
         socket.close();
 ​
 ​
     }
 }
 ​

接收方:循环接收消息

 package chat;
 ​
 ​
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 ​
 public class UdpReceive_1 {
     public static void main(String[] args)  throws Exception{
         DatagramSocket socket = new DatagramSocket(6666);
 ​
 ​
 ​
 ​
         //准备接收的包裹
         byte[] container = new byte[1024];
         while(true){
             DatagramPacket packet = new DatagramPacket(container,0,container.length);
             socket.receive(packet);//阻塞式接收包裹
             //断开连接 bye
             byte[] data = packet.getData();
             String receiveData = new String(data , 0, data.length);
             System.out.println(receiveData);
             if(receiveData.equals("bye")){
                 break;
             }
         }
         socket.close();
 ​
     }
 }
 ​

在线咨询:两个人都是发送方,也都可以是接收方!

实例:

 package chat;
 ​
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetSocketAddress;
 ​
 public class TalkSend implements Runnable {
     DatagramSocket socket = null;
     BufferedReader reader =null;
     private  int fromPort;
     private String toIP;
     private int toPort;
 ​
     public TalkSend(int fromIP, String toIP, int toPort) {
         this.fromPort = fromPort;
         this.toIP = toIP;
         this.toPort = toPort;
         try {
             socket = new DatagramSocket(fromPort);
             reader = new BufferedReader(new InputStreamReader(System.in));
         }catch (Exception e){
             e.printStackTrace();
         }
 ​
     }
 ​
     @Override
     public void run() {
         while(true){
             try{
                 String data = reader.readLine();
                 byte[] datas = data.getBytes();
                 DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
                 socket.send(packet);
                 if(data.equals("bye")){
                     break;
                 }
             }catch (Exception e){
                 e.printStackTrace();
             }
         socket.close();
     }
 }
 }
 ​
 package chat;
 ​
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.SocketException;
 ​
 public class TalkReceive  implements Runnable{
     DatagramSocket socket = null;
     private int port;
     private String msgFrom;
 ​
     public TalkReceive(int port,String msgFrom) {
         this.port = port;
         this.msgFrom = msgFrom;
         try {
             socket = new DatagramSocket(port);
         } catch (SocketException e) {
             e.printStackTrace();
         }
     }
 ​
     @Override
     public void run() {
 ​
         while(true){
             try {
                 //准备接收的包裹
                 byte[] container = new byte[1024];
                 DatagramPacket packet = new DatagramPacket(container,0,container.length);
                 socket.receive(packet);//阻塞式接收包裹
                 //断开连接 bye
                 byte[] data = packet.getData();
                 String receiveData = new String(data , 0, data.length);
                 System.out.println(msgFrom + ":"+receiveData);
                 if(receiveData.equals("bye")){
                     break;
                 }
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
         socket.close();
     }
 }
 ​
 package chat;
 ​
 public class TalkStudent {
     public static void main(String[] args) {
         //开启两个线程
         new Thread(new TalkSend(7777,"localhost",9999)).start();
         new Thread(new TalkReceive(8888,"老师")).start();
     }
 }
 ​
 package chat;
 ​
 public class TalkTeacher {
     public static void main(String[] args) {
         //开启两个线程
         new Thread(new TalkSend(5555,"localhost",8888)).start();
         new Thread(new TalkReceive(9999,"学生")).start();
     }
 }

URL

统一资源定位符:定位资源的,定位互联网上的某一个资源

DNS 域名解析 www.baidu.com xxx.x.xx

 协议://IP地址:端口号/项目名/资源
 package bitter04;
 import java.net.MalformedURLException;
 import java.net.URL;
 public class URL_1 {
     public static void main(String[] args) {
         URL url = null;
         try {
             url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuangshen&password=123");
         } catch (MalformedURLException e) {
             e.printStackTrace();
         }
         System.out.println(url.getProtocol());//协议
         System.out.println(url.getHost());//主机IP
         System.out.println(url.getPort());//端口
         System.out.println(url.getPath());//文件
         System.out.println(url.getFile());//全路径
         System.out.println(url.getQuery());//参数
 ​
 ​
 ​
     }
 }
 ​

 package bitter04;
 ​
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
 public class UrlDown {
     public static void main(String[] args) throws Exception {
 ​
             //1.下载地址
             URL url = new URL("http://localhost:8080/hbx/Security.txt");
             //2.连接到这个资源 HTTP
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
         InputStream inputStream = urlConnection.getInputStream();
         FileOutputStream fos = new FileOutputStream("Security.txt");
         byte[] buffer = new byte[1024];
         int len;
         while((len = inputStream.read(buffer)) != -1){
             fos.write(buffer,0,len);//写出这个数据
         }
 ​
         fos.close();
         inputStream.close();
         urlConnection.disconnect();//断开连接
 ​
     }
 ​
 }
 ​
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值