一、网络编程:在不同计算机上进行数据传输二、UDP传输数据:DatagramSocket和DatagramPacket三、TCP传输数据

一、网络编程:在不同计算机上进行数据传输

网络编程三要素:
IP地址:Internet protocol address,给网络中的计算机进行编号,Java中的InetAddress类。

端口:port,通过端口号可以找到对应电脑上的某个程序。
协议:连接和通信的规则:

UDP(user datagram protocol)用户数据报协议特点:不需要连接,速度快,大小限制64k,易丢失数据。

TCP(transmission control protocol)传输控制协议特点:需要连接,速度慢,无大小限制,不易丢失数据。

二、UDP传输数据:DatagramSocket和DatagramPacket

发送端:

// 1.创建发送端

DatagramSocket datagramSocket = new DatagramSocket();

// 2.创建数据包,发给本地ip下的9527端口

byte[] bytes = "你好啊".getBytes(StandardCharsets.UTF_8);

DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length, InetAddress.getLocalHost(), 9527);        

// 3.发送数据,然后关闭

datagramSocket.send(datagramPacket);

datagramSocket.close();

接收端:

// 1.创建接收端, 将本机的9527端口,提供别人找到

DatagramSocket datagramSocket = new DatagramSocket(9527);

// 2.创建空的数据包

byte[] bytes = new byte[1024];

DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length);

// 3.接收到的数据放到包中,也就是byte数组中,打印出来,并关闭

datagramSocket.receive(datagramPacket);

System.out.println(new String(bytes, 0, datagramPacket.getLength()));

datagramSocket.close();

三、TCP传输数据

客户端:

        //1.创建Socket客户端

        Socket socket = new Socket("192.168.86.80", 9999);

        //获取服务端的输出流,循环读到程序,写出输出流

        OutputStream out = socket.getOutputStream();

        // 2.创建输入流读取文件

        FileInputStream fis = new FileInputStream("D:\\MyTest\\test.jpg");

        byte[] bytes = new byte[1024];

        int len;

        while ((len = fis.read(bytes)) != -1) {

            out.write(bytes, 0, len);

        }

        //传输结束,给出结束标记!!!

        socket.shutdownOutput();

        //3.接收服务端的回应

        InputStream in = socket.getInputStream();

        len = in.read(bytes);

        System.out.println("服务器回复:" + new String(bytes, 0, len));

        //关闭资源

        in.close();fis.close();out.close();socket.close();
服务端:

System.out.println("服务端启动");

ServerSocket ss = new ServerSocket(9999);

while (true) {

try {

//接收客户端连接(一个客户端连接,就有一个Socket被创建)

Socket socket = ss.accept();

System.out.println("有客户端连接:"+socket);

//生成文件名

String fileName = UUID.randomUUID().toString()+".jpg";

//创建文件输出流,读后写出去

FileOutputStream fos = new FileOutputStream("t_day12\\upload\\"+fileName);

//接收客户端的资源,保存到服务器的磁盘上

InputStream in = socket.getInputStream();

byte[] bytes = new byte[1024];

int len;

while ((len=in.read(bytes))!=-1){

fos.write(bytes,0,len);

}

//回复消息给客户端

OutputStream out = socket.getOutputStream();

out.write("文件保存成功".getBytes());

 //关闭资源

out.close();in.close();fos.close();socket.close();

        System.out.println("文件保存成功");

        } catch (Exception e) {

              System.out.println("文件传输异常");

            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值