目录

一、 netstat指令

二、UDP网络通信编程

1.基本介绍和原理

2.基本流程

三、应用案例

1)UDP通信

2)TCP通信

3)UDP

4)tcp文件下载


一、 netstat指令

netstat -anb 查看端口被哪个程序监听

(以管理员身份运行命令行)

二、UDP网络通信编程

1.基本介绍和原理

2.基本流程

三、应用案例

1)UDP通信

思路分析:

package com.feiyang.basic16_net;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** @author:飞扬* @公众hao:程序员飞扬* @description:*/
public class UDPReceiverA {public static void main(String[] args) throws IOException {//创建一个DatagramSocket对象,在9999端口接收数据DatagramSocket socket = new DatagramSocket(9999);//构建一个DatagramPacket对象,准备接收数据byte[] bytes = new byte[1024];DatagramPacket packet = new DatagramPacket(bytes, bytes.length);//调用接收方法,将通过网络传输的DatagramPacket对象填充到packet对象System.out.println("接收端A等待接收数据。。。");socket.receive(packet);//把packet进行拆包,取出数据,并显示int length = packet.getLength();byte[] data = packet.getData();System.out.println("接收端A接收到数据:" + new String(data, 0,length));//回应String s = "好的,明天见";System.out.println("接收端A发送数据:" + s);byte[] dataSend = s.getBytes();DatagramPacket packetSend = new DatagramPacket(dataSend,dataSend.length, InetAddress.getByName("192.168.0.106"),9998);socket.send(packetSend);//关闭资源socket.close();}
}
package com.feiyang.basic16_net;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;/*** @author:飞扬* @公众hao:程序员飞扬* @description:*/
public class UDPSenderB {public static void main(String[] args) throws IOException {//创建DatagramSocket对象,在9998端口接收数据DatagramSocket socket = new DatagramSocket(9998);//将需要发送的数据,封装到DatagramPacketString s = "hello,明天去吃火锅啊";System.out.println("发送端B发送数据:" + s);byte[] bytes = s.getBytes();DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("192.168.0.106"),9999);//发送socket.send(packet);//构建一个DatagramPacket对象,准备接收数据byte[] bytesRe = new byte[1024];DatagramPacket packetRe = new DatagramPacket(bytesRe, bytesRe.length);//调用接收方法,将通过网络传输的DatagramPacket对象填充到packet对象System.out.println("发送端B等待接收数据。。。");socket.receive(packetRe);//把packet进行拆包,取出数据,并显示int length = packetRe.getLength();byte[] data = packetRe.getData();System.out.println("发送端B接收数据:" + new String(data, 0,length));//关闭资源socket.close();}
}

执行结果:

2)TCP通信

package com.feiyang.basic16_net;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;/*** @author:飞扬* @公众hao:程序员飞扬* @description: socke通信,字符流,服务端*/
public class Homework01Server {public static void main(String[] args) throws IOException {//1.在本机9999端口监听ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端在9999端口监听...");//2.当没有连接时,程序会阻塞,等待连接,如果有客户端连接,则会返回socket对象,程序继续Socket socket = serverSocket.accept();System.out.println("服务端socket=" + socket.getClass());//3.读取数据InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));String s = bufferedReader.readLine();System.out.println("服务端接收=" + s);String answer = "";if("name".equals(s)){answer = "我是程序员飞扬";}else if("hobby".equals(s)){answer = "爱好编程";}else{answer = "你说啥子?";}//服务端发送消息OutputStream outputStream = socket.getOutputStream();BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write(answer);bufferedWriter.newLine();bufferedWriter.flush();//4.关闭流bufferedReader.close();bufferedWriter.close();socket.close();serverSocket.close();System.out.println("服务端退出。");}
}
package com.feiyang.basic16_net;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;/*** @author:飞扬* @公众hao:程序员飞扬* @description: socke通信,字符流,客户端*/
public class Homework01Client {public static void main(String[] args) throws IOException {//1.连接服务端(IP,端口)Socket socket = new Socket(InetAddress.getLocalHost(), 9999);System.out.println("客户端socket=" + socket.getClass());//2.连接上之后会返回一个socket对象,得到和socket关联的输出流对象OutputStream outputStream = socket.getOutputStream();//3.写数据BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));Scanner scanner = new Scanner(System.in);System.out.println("请输入您要查询的内容:");String next = scanner.next();bufferedWriter.write(next);bufferedWriter.newLine();bufferedWriter.flush();//接收数据InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));String s = bufferedReader.readLine();System.out.println("客户端接收=" + s);//4.关闭io流,关闭socket连接bufferedReader.close();bufferedWriter.close();socket.close();System.out.println("客户端退出。");}
}

执行结果:

3)UDP

package com.feiyang.basic16_net;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** @author:飞扬* @公众hao:程序员飞扬* @description:*/
public class HomeworkReceiverA {public static void main(String[] args) throws IOException {//创建一个DatagramSocket对象,在9999端口接收数据DatagramSocket socket = new DatagramSocket(8888);//构建一个DatagramPacket对象,准备接收数据byte[] bytes = new byte[1024];DatagramPacket packet = new DatagramPacket(bytes, bytes.length);//调用接收方法,将通过网络传输的DatagramPacket对象填充到packet对象System.out.println("接收端A等待接收数据。。。");socket.receive(packet);//把packet进行拆包,取出数据,并显示int length = packet.getLength();byte[] data = packet.getData();String s1 = new String(data, 0, length);System.out.println("接收端A接收到:" + s1);String answer ="";if("四大名著".equals(s1)){answer = "<<红楼梦>>、<<三国演义>>、<<水浒传>>、<<西游记>>";}else{answer = "您说的嘛?";}//回应System.out.println("接收端A发送数据:" + answer);String s = answer;byte[] dataSend = s.getBytes();DatagramPacket packetSend = new DatagramPacket(dataSend,dataSend.length, InetAddress.getByName("192.168.0.106"),9998);socket.send(packetSend);//关闭资源socket.close();}
}
package com.feiyang.basic16_net;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;/*** @author:飞扬* @公众hao:程序员飞扬* @description:*/
public class HomeworkSenderB {public static void main(String[] args) throws IOException {//创建DatagramSocket对象,在9998端口接收数据DatagramSocket socket = new DatagramSocket(9998);//将需要发送的数据,封装到DatagramPacketScanner scanner = new Scanner(System.in);System.out.println("请输入: ");String next = scanner.next();byte[] bytes = next.getBytes();DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("192.168.0.106"),8888);//发送socket.send(packet);//构建一个DatagramPacket对象,准备接收数据byte[] bytesRe = new byte[1024];DatagramPacket packetRe = new DatagramPacket(bytesRe, bytesRe.length);//调用接收方法,将通过网络传输的DatagramPacket对象填充到packet对象System.out.println("发送端B等待接收数据。。。");socket.receive(packetRe);//把packet进行拆包,取出数据,并显示int length = packetRe.getLength();byte[] data = packetRe.getData();System.out.println("发送端B接收到数据:" + new String(data, 0,length));//关闭资源socket.close();}
}

执行结果:

4)tcp文件下载

思路分析:

package com.feiyang.basic16_net;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;/*** @author:飞扬* @公众hao:程序员飞扬* @description:*/
public class Homework03Server {public static void main(String[] args) throws IOException {//服务端在9999端口监听ServerSocket serverSocket = new ServerSocket(9999);Socket socket = serverSocket.accept();InputStream inputStream = socket.getInputStream();String downLoadFileName="";/*byte[] bytes = new byte[1024];int len = 0;String downLoadFileName="";while((len = inputStream.read()) != -1){downLoadFileName += new String(bytes, 0, len);}
*///获取文件名InputStreamReader isr = new InputStreamReader(inputStream, "utf-8"); //防止乱码BufferedReader bufferedReader = new BufferedReader(isr);String s = bufferedReader.readLine();downLoadFileName = s;System.out.println("文件名:" + downLoadFileName);//判断要下载的文件String filePath="";if("天国的女儿".equals(downLoadFileName)){filePath = "src\\天国的女儿.mp3";}else{//filePath = "src:\\aaa.mp3";}//读取对应目录下的文件BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));byte[] bytes1 = StreamUtils.streamtoByteArray(bis);//将文件写会socke给客户端BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());bos.write(bytes1);socket.shutdownOutput();//关闭资源bis.close();inputStream.close();socket.close();serverSocket.close();System.out.println("服务端退出。。。");}
}
package com.feiyang.basic16_net;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;/*** @author:飞扬* @公众hao:程序员飞扬* @description:*/
public class Homework03Client {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.println("请输入要下载的文件名: ");String s = scanner.next();//客户端将文件名写入socket,给服务端Socket socket = new Socket(InetAddress.getLocalHost(), 9999);OutputStream os = socket.getOutputStream();os.write(s.getBytes());socket.shutdownOutput();//获取服务端回写的文件流BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());byte[] bytes = StreamUtils.streamtoByteArray(bis);String filePath = "d:\\" + s + ".mp3";//将文件写入指定路径的磁盘下BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));bos.write(bytes);bos.flush();//关闭资源bos.close();bis.close();os.close();socket.close();System.out.println("客户端下载完毕。。。");}
}

执行结果:

Java筑基34-网络编程02-UDP网络编程网络编程案例相关推荐

  1. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

  2. 网络编程---TCP/UDP套接字编程原理

    本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...

  3. step5 . day4 网络编程 基于UDP协议的网络编程流程及API

    UDP协议是面向无连接,不可靠的传输协议,编程流程如下; 服务器端: 1. socket(),返回一个文件描述符,用于通信 2. bind(); //得先完成结构体的填充sockaddr_in 3. ...

  4. Python中的网络编程之UDP

    Python中的网络编程之UDP 文章目录 Python中的网络编程之UDP 一.Socket编程 `1.什么是客户端/服务器架构`? **`2.套接字:通信端点`** 3.套接字地址:主机-端口对 ...

  5. TCP和UDP套接字编程

    一.Socket简单介绍 如果要在应用层调用传输层的服务,进行相关程序的设计,就要涉及到套接字编程.套接字也称之为Socket,本质上它就是利用传输层提供的一系列Api来进行网络应用程序的设计. 网络 ...

  6. Java网络编程_TCP编程以及UDP编程

    首先理清一个概念:网络编程不等于网站编程,网络编程即使用套接字来达到进程间通信,现在一般称为TCP/IP编程. 计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信 ...

  7. Java网络编程,使用Java实现UDP和TCP网络通信协议,以及基于UDP的在线聊天室。

    文章目录 前言 一.网络编程概念 1.网络 2. 网络编程的目的 3.想要达到这个效果需要什么 4.网络分层 二.网络编程Java类 1.IP地址:InetAddress 2.端口 3.TCP连接 3 ...

  8. Java网络编程(网络基础(IP端口号网络通信协议)、TCP编程、UDP编程和URL编程原理以及常用方法的实例)

    网络编程 网络基础概述 计算机网络:   把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信息.共享硬件.软件.数据信息等 ...

  9. 【Linux网络编程】UDP编程

    00. 目录 文章目录 00. 目录 01. 概述 02. UDP编程C/S结构 03. UDP常用函数 3.1 sendto函数 3.2 recvfrom函数 3.3 bind函数 04. 程序示例 ...

  10. java udp 同一个端口实现收发_Java网络编程之UDP协议

    伙伴们注意了! 小编在这里给大家送上关注福利: 搜索微信公众号"速学Java"关注即可领取小编精心准备的资料一份! 今天我们来聊聊 网络编程这部分的内容 网络编程 1)计算机网络 ...

最新文章

  1. C#实现字符串左旋转操作
  2. AtCoder Grand Contest 015
  3. Linq专题之提高编码效率—— 第一篇 Aggregate方法
  4. Java课程设计基于ssm的微信小程序
  5. Java基础入门笔记-包装类
  6. 渗透中Poc、Exp、Payload、Rce与Shellcode的区别
  7. Java教程:Java定义字符串(2种方式)
  8. IUS database
  9. JZ3-从尾到头打印链表
  10. 阿里旺旺2012自动登录
  11. python数据包pandas_python | 数据分析(二)- Pandas数据包
  12. 那些年我们常用的软件
  13. ps自带磨皮滤镜插件Portraiture3PS版
  14. 照片模糊怎么变清晰?不如试试这两个方法
  15. RequireJS - 用法
  16. Java包(package)
  17. mysql window系统备份远程数据库到本地
  18. flac转换成mp3,4种方法教会你
  19. js 变量、函数重复声明和变量提升浅析
  20. windows xp 算号原理

热门文章

  1. 两个向量叉乘表示什么意思_为什么向量积(叉乘)的这两个概念是这样的?
  2. MinDoc v0.4 发布 轻量级文档在线管理系统
  3. PCIe+Switch高速存储方案设计
  4. java cap是什么_分布式CAP是什么?它的原理是什么?
  5. python 网站 批量 投票_python requests 简单实现易班自动登录,批量_文章发布,投票发布,评论,点赞,v2.0...
  6. 华人操作系统项目列表
  7. 页面中设置IE浏览器的文档模式
  8. mysql数据库的单引号用法_[数据库]mysql单引号和双引号的用法
  9. win7装sql2000找不到服务器,Win7怎么正确安装使用sql2000教程
  10. Base64的编码与解码的实现方法(超详细,每一行代码都含注释)