64.【网络编程】(三)

简介: 64.【网络编程】

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();
    }
}


相关文章
|
6月前
|
消息中间件 Kubernetes 网络协议
网络编程一些问题总结
网络编程一些问题总结
|
2月前
|
网络协议 程序员 API
初识网络编程
本文介绍了网络编程的重要概念,包括IP地址、端口号和协议。IP地址是设备在网络中的唯一标识,IPv4已用尽,IPv6提供了更多地址。端口号用于区分设备上的不同应用程序,取值范围为0~65535。协议定义了网络传输规则,常分为TCP/IP五层模型和OSI七层模型。文章还讨论了TCP与UDP的区别,并提供了UDP协议的简单示例。
47 0
初识网络编程
|
6月前
|
网络协议 API
|
6月前
|
Linux
网络编程之 socket编程
网络编程之 socket编程
68 0
|
网络协议 关系型数据库 MySQL
网络编程初识
网络编程初识
56 0
|
Java C++
4. 网络编程
4. 网络编程
57 0
|
网络协议
64.【网络编程】(一)
64.【网络编程】
41 0
|
网络协议
64.【网络编程】(二)
64.【网络编程】
39 0