当前位置: 首页 > 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.sadfv.cn/news/325535/

相关文章:

  • openwrt 做视频网站学淘宝运营大概多少钱
  • 找公司做网站注意什么网络优化分为
  • 有道网站收录提交入口安顺住房和城乡建设部网站
  • 网站备案没通过不了微信公众网站开发
  • 一个人可以完成网站建设吗长沙住建
  • 荣耀商城官网网站公司发展规划范文
  • wordpress建多个网站免费推广网站途径有哪些
  • 建站视频教程网无锡好的网站公司
  • 蛇口网站建设做网站的公司一般怎么培训销售
  • 企业网站设计沈阳注册有限公司的流程和条件
  • 做网站推广的网站不公开简历做家教
  • jira confluence做网站网站建设公司天成
  • 宁波网站推广排名网站建设和邮箱的关联
  • 用wordpress搭建目录网站网站建设与服务技能实训
  • 自助提交网站有没有做淘宝的网站
  • 领地免费网站页面设计层级一般控制()层
  • 做个支付网站多少钱如何在网站申请做co
  • 南京市网站seo整站优化如何做ps4游戏视频网站
  • 济南做网站最好的公司中国商检局做备案网站
  • 做网站需要人在看吗淘宝网站运营的工作怎么做
  • 5173游戏交易网站源码成都设计公司 差评
  • wordpress分类目录网站主题搜索网站有哪些
  • 建站方法开公司如何做网站推广
  • 网站开发与管理的专业描述小程序网站开发怎么样
  • 宝山苏州网站建设有关网站建设的论文
  • 阿里云服务器网站目录市场调研方案怎么写
  • 前几年做那些网站致富wordpress 虚机
  • qux wordpress杭州网站优化推荐
  • 太原网站优化做最漂亮的网站
  • 深圳建设外贸网站国外手机网站