第二十天学习笔记

网络编程

1.架构

2.网络编程三要素:ip地址,端口号,协议

检查双方网路是否畅通:可以跟网址,亦可以跟数据

3.inetAddress类(以下三个是类的方法)

主机ip地址:ipconfig

主机名称:hostname

得到主机名,并且获得ip和名字的方法演示:

4.端口号

5协议:

6.udp数据发送

7.接收数据,单播

8.传输文件代码,最好两个开着,否则数度太快接受不到数据

发送端:

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class InterProgramSend {
    public static void main(String[] args) throws IOException {
        //按照下面的要求实现程序
        //UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束
        // UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收

        //生成发送的快递公司,可以指定端口,也可以不写使用默认的
        DatagramSocket ds = new DatagramSocket();
        //生成发送包裹,可以传地址也可以传主机名。
       InetAddress address = InetAddress.getByName("10.101.140.191");
       //得到主机名
       String ip =address.getHostAddress();
       //得到端口号
        int port = 10086;
        String str;
        Scanner sc = new Scanner(System.in);
        str = sc.next();
        int aimNum = Integer.parseInt(str);
        while(aimNum!=886) {
            DatagramPacket dp = new DatagramPacket(str.getBytes(), 0, str.getBytes().length, address, port);
            ds.send(dp);

            str = sc.next();
             aimNum = Integer.parseInt(str);

        }

        ds.close();

    }
}

接收端:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class InterProgramReceive {
    public static void main(String[] args) throws IOException {

        DatagramSocket ds = new DatagramSocket(10086);
        InetAddress inetAddress = InetAddress.getByName("10.101.140.191");

        String ip = inetAddress.getHostAddress();

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);


        System.out.println("我看看有没有运行");
        ds.receive(dp);
        System.out.println(dp.getAddress());
        System.out.println(new String(dp.getData()));
        System.out.println("我看看有没有接完");

    }
}

8.接收数据,组播

//这是组播的方式

//生成组播发送方式和端口
MulticastSocket ms = new MulticastSocket(10000);
//主机地址
InetAddress address = InetAddress.getByName("224.0.0.1");
//加入
ms.joinGroup(address);

String str;
Scanner sc = new Scanner(System.in);
str = sc.next();

while(!str.equals("886")) {
    DatagramPacket dp = new DatagramPacket(str.getBytes(), 0, str.getBytes().length, address, 10000);
    ms.send(dp);

    str = sc.next();


}

ms.close();

//这是组播方式
MulticastSocket ms = new MulticastSocket(10000);
InetAddress inetAddress = InetAddress.getByName("224.0.0.1");
ms.joinGroup(inetAddress);

byte[] bytes = new byte[65];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);

System.out.println("我看看有没有运行");
ms.receive(dp);

System.out.println(dp.getAddress());
System.out.println(new String(dp.getData(),0,dp.getLength()));//除八是因为八个字节表示一个数,如果不想÷8则dp.length()即可。
System.out.println("我看看有没有接完");

9.接收数据,广播(改个端口号就行)

10.Tcp通信及其代码,会出现乱码的情况,但是UDP好像没有遇见。因为Tcp面向字节,而Udp面向报文。

11.Tcp传输练习,UUID生成文件序列符

flush() 是把缓冲区的数据强行输出,主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。

发送端

//这是作业
        //TCP通信练习2---接收和反馈
        //客户端:发送一条数据,接收服务端反馈的消息并打印服务器:接收数据并打印,再给客户端反馈消息
         //创建发送数据的通道
/* Socket socket = new Socket("127.0.0.1",10564);
        OutputStream os = socket.getOutputStream();
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        while(!str.equals("886")){
            os.write(str.getBytes());
            str =  sc.next();
        }
        //关闭发送
        socket.shutdownOutput();

        //创建接受反馈的通道
        InputStream is = socket.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        int len ;
        while((len = isr.read())!=-1){
            System.out.println((char) len);
        }


        os.close();
        socket.close();*/
        //客户端:将本地文件上传到服务器。接收服务器的反馈。
        // 服务器:接收客户端上传的文件,上传完毕之后给出反馈。
        //生成端口
        Socket socket = new Socket("127.0.0.1",10056);
        //文件来源
        File file = new File("D:\\JavaStudyDir\\c.png");
        //读取文件
        FileInputStream fis = new FileInputStream(file);
        BufferedInputStream bis = new BufferedInputStream(fis);
        //生成输出流
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        //读文件和写文件
        int len;
        while ((len = bis.read())!= -1){
            bos.write(len);
        }
        bos.flush();
        //关闭输出文件通道
        Thread thread = Thread.currentThread();
        thread.sleep(1000);
        socket.shutdownOutput();

        InputStream returnIs = socket.getInputStream();
        InputStreamReader isr = new InputStreamReader(returnIs);
        int returnLen;
        while ((returnLen = isr.read())!=-1){
            System.out.println((char) returnLen);
        }

接收端

 //这是作业
        //TCP通信练习2---接收和反馈
        //客户端:发送一条数据,接收服务端反馈的消息并打印服务器:接收数据并打印,再给客户端反馈消息
        //创建接收数据的通道
/*   ServerSocket socketSocket = new ServerSocket(10564);
        Socket socket = socketSocket.accept();
        InputStream is = socket.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        int len ;
        while((len = isr.read())!=-1){
            System.out.println((char) len);
        }



        //创建发送反馈的通道
        OutputStream os = socket.getOutputStream();
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        while(!str.equals("886")){
            os.write(str.getBytes());
            str =  sc.next();
        }


        os.close();
        socket.close();*/
        //客户端:将本地文件上传到服务器。接收服务器的反馈。
        // 服务器:接收客户端上传的文件,上传完毕之后给出反馈。

        //生成文件的序列号
        UUID uuid = UUID.randomUUID();
        String uid =  uuid.toString().replace("-","");
        //生成端口
        ServerSocket serverSocket = new ServerSocket(10056);
        Socket socket = serverSocket.accept();
        //生成接收数据通道
        InputStream is = socket.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        //写出文件地址
        File file = new File("D:\\JavaStudyDir\\"+uid+".png");
        //生成输出文件通道
     OutputStream bos = new  FileOutputStream(file);
        //输出文件
        int len;
        while ((len = bis.read())!=-1){
           bos.write(len);
        }
        //反馈数据
        OutputStream os = socket.getOutputStream();
        String str="收到了";
        os.write(str.getBytes());
        //关闭资源
        os.close();
        bos.close();
        bis.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值