当前位置: 首页 > news >正文

有名的网站网站建设赶集网

有名的网站,网站建设赶集网,网络营销策略定义,五金外贸订单网文章目录 UDPDatagramSocktet APIDatagramPacket API UDP 客户端服务器实现 UDP 先来认识一下 UDP 的 socket api#xff0c;两个核心的类#xff1a;DatagramSocket、DatagramPacket. DatagramSocktet API 是一个 socket 对象。 什么是 socket#xff1f; 操作系统… 文章目录 UDPDatagramSocktet APIDatagramPacket API UDP 客户端服务器实现 UDP 先来认识一下 UDP 的 socket api两个核心的类DatagramSocket、DatagramPacket. DatagramSocktet API 是一个 socket 对象。 什么是 socket 操作系统使用文件这样的概念来管理一些软硬件资源。网卡操作系统也是使用 文件 的方式来管理网卡的。表示网卡的这类文件称为 Socket 文件。Java 中的 socket 对象就对应 系统里的 socket 文件。 因此想要进行网络通信必须得先有 socket 对象。 DatagramSocket构造方法 方法签名方法说明DatagramSocket()创建一个UDP数据报套接字的Socket绑定到本机任意一个随机端口 (一般用于客户端DatagramSocket(int port)创建一个UDP数据报套接字的Socket绑定到本机指定的端口 (一般用于服务端 DatagramSocket() 在客户端这边使用客户端使用哪个端口是系统自动分配的。 一个客户端的主机上面运行的程序很多天知道你手动指定的端口是不是被别的程序占用了。因此让系统自动分配一个端口是更明智的选择. DatagramSocket(int port) 在服务器这边使用服务器使用哪个端口是手动指定的。 对于服务器来说需要有一个固定的端口号方便其他客户端找到。 DatagramSocket 方法 方法签名方法说明void receive(DatagramPacket p)从此套接字接收数据报如果没有接收到数据报该方法会阻塞等待void send(DatagramPacket p)从此套接字发送数据报包不会阻塞等待直接发送void close()关闭此数据报套接字 DatagramPacket API 表示了一个 UDP 发送和接收的数据报。 代表了系统中设定的 UDP 数据报的二进制结构。 DatagramPacket 构造方法 方法签名说明方法DatagramPacket(byte[] buf, int length)构造一个 DatagramPacket 用来接收数据报接收的数据保存在字节数组第一个参数buf中接收指定长度第二个参数 length)DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)构造一个 DatagramPacket 用来发送数据报发送的数据为字节数组第一个参数buf中从0到指定长度第二个参数length。address指定目的主机的IP和端口号 DatagramPacket 方法: 方法签名方法说明InetAddress getAddress()从接收的数据报中获取发送端主机IP地址或从发送的数据报中获取接收端主机IP地址int getPort()从接收的数据报中获取发送端主机的端口号或从发送的数据报中获取接收端主机端口号byte[] getData()获取数据报中的数据 UDP 客户端服务器实现 接下来手动写 UDP 客户端服务器 实现一个最简单的回显服务器 (Echo Server). 回显服务器顾名思义就是客户端发啥服务器就返回啥。 我们知道一个服务器可以供多个客户端同时使用因此我们最先想到的是利用多线程来实现 UDP. 但事实上 UDP 服务器不需要多线程是因为UDP是无连接的每个数据包都是独立的服务器只需要监听一个端口接收数据包并处理即可。 核心思路 服务器 接收客户端发送过来是请求 ( 收到的请求是一个 DatagramPacket 类 )并解析出请求内容 ( 转换成 String 类)。根据请求做出响应把响应返回给客户端 客户端 从控制台读取用户输入的内容.构造请求对象并发给服务器.接收服务器给出的响应并解析出响应内容.将响应内容打印出来. 客户端服务器相互关联通过 ip 和 端口号. ip每个服务器都有自己的 ip 地址客户端需要通过 ip 找到服务器。127.0.0.1 就表示自己的电脑端口号每个服务器有很多个端口端口号就是用于客户端到底是访问服务器的哪个端口。 实现 UDP 会用到的方法 getSocketAddress() 就是 getAddress() 和 getPort() 的结合体. [address:port] InetAddress.getByName(“主机名”)如果传入的是主机名则该方法会尝试解析该主机名如果解析成功则返回对应的 IP 地址如果解析失败则抛出 UnknownHostException 异常. getData()获取数据报中的数据. 客户端代码 import java.io.IOException; import java.net.*; import java.util.Scanner;public class UdpEchoClient {private DatagramSocket socket null;private String serverIp ;private int serverPort;public UdpEchoClient(String ip, int port) throws SocketException {serverIp ip;serverPort port;// 这个 new 操作就不再指定端口了让系统自动分配一个空闲端口socket new DatagramSocket();}public void start () throws IOException {Scanner scanner new Scanner(System.in);System.out.println(客户端启动!);while (true) {// 1. 从控制台读取用户输入的内容System.out.print(-);String request scanner.nextLine();// 2. 构造请求对象并发给服务器DatagramPacket requestPacket new DatagramPacket(request.getBytes(), request.getBytes().length, InetAddress.getByName(serverIp), serverPort);socket.send(requestPacket);// 3. 读取服务器的响应, 并解析出响应内容.DatagramPacket responsePacket new DatagramPacket(new byte[4096], 4096);socket.receive(responsePacket);String response new String(responsePacket.getData(), 0, responsePacket.getLength());// 4. 显示到屏幕上System.out.println(response);}}public static void main(String[] args) throws IOException {UdpEchoClient client new UdpEchoClient(127.0.0.1,9090);client.start();} }/*客户端启动-hellohello */服务器代码 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;//回显服务器 //客户端发的请求是啥服务器返回的响应就是啥 public class UdpEchoServer {private DatagramSocket socket null;public UdpEchoServer(int port) throws SocketException {socket new DatagramSocket(port);}public void start() throws IOException {System.out.println(服务器启动);while(true) {// 1.读取数据并请求DatagramPacket requestPacket new DatagramPacket(new byte[4096], 4096);socket.receive(requestPacket);// 转换成字符转String request new String(requestPacket.getData(), 0, requestPacket.getLength());// 2.根据请求计算出响应String response process(request);// 3.把响应写回给客户端// 此时需要告知网卡要发的内容是啥要发给谁DatagramPacket responsePacket new DatagramPacket(response.getBytes(), response.getBytes().length, requestPacket.getSocketAddress());socket.send(responsePacket);//记录日记方便观察程序执行效果System.out.printf([%s:%d] req: %s , resp: %s\n, responsePacket.getAddress().toString(), responsePacket.getPort(),request, response);}}//根据请求计算响应由于是回显程序响应内容和请求完全一样private String process(String request) {return request;}public static void main(String[] args) throws IOException {UdpEchoServer server new UdpEchoServer(9090); //设定服务器的端口号为 9090server.start();} }/*服务器启动[/127.0.0.1:54015] req: hello , resp: hello */问题1我电脑上的 udp 服务器别人可以访问吗 答不可以因为我当前的电脑上没有 “外网IP”。解决办法就是买一个有外网的云服务器 问题2socket 对象用完后需要关闭吗 答需要我们要知道为什么要关闭 socket 对象。最主要的就是释放系统中的 socket 文件从而释放文件描述符。 但是上述代码中我们为什么没去关闭 socket 对象呢 因为对于咱们这个服务器来说DatagramSocket 不关闭问题不大。整个程序中只有一个 socket 对象不是频繁创建的生命周期是跟随整个进程的。但是如果是有多个 socket 对象, 且 socket 对象生命周期更短需要频繁创建释放。一定要记得去 close 。
http://www.hkea.cn/news/14310557/

相关文章:

  • 做长图网站wordpress 占用内存
  • 公关公司多少钱一个月昆明seo培训
  • 衡水提供网站制作公司哪家好企业账号登录入口
  • 网站建设合同书封皮广东省住房和城乡建设厅官网网址
  • 教育机构网站建设做的网站每年需要续费
  • 做企业门户网站要准备哪些内容网站做几级等保
  • 查询网站最新域名wordpress 地址栏
  • 学校网站建设机构2021十大网络舆情案例
  • 甘肃省建设银行校园招聘网站五金企业网站模板
  • 网站用什么好注册一个免费的网站
  • 建设银行官网首页网站公告公司域名备案
  • 国外做展台搭建的设计网站怎么查看网站是哪个公司做的
  • 温州建站软件企业网络推广多喜爱
  • 医院网站建设预算表seo关键词词库
  • 香蜜湖网站建设php html转 wordpress
  • 出国越南做网站8000保底自己做的网站 能收索么
  • 网站建设 响应式 北京做网站要求什么软件
  • 建立网站信息发布登记制度手机网站开发存储数据
  • 万户网络做网站怎么样自己开发网站要多少钱
  • 让网站会员做产品标签确认网站策划职业规划
  • 建网站多少钱 万户网站制作过程合理步骤是什么
  • 二手书的网站建设怎么修改地图的公司地址
  • 天津自助建站软件申请免费网站注册
  • 网络公司怎么优化网站赚钱秒到账的游戏
  • 神马网站快速排名软件百度贴吧的互动社区
  • 游戏网站开发需求分析陈木胜怎么死的
  • 在线制作网站免费网站开发与运营方向和企业管理方向
  • 网站建设美文wordpress调取指定分类下的文章
  • 网站开发前端是什么网站pv uv
  • wordpress 建站新浪微博关联wordpress