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

辽宁城乡建设集团成立网站企业营销策划书模板

辽宁城乡建设集团成立网站,企业营销策划书模板,上海企业100强名单,设计网站首页1文章目录一、DatagramSocket API构造方法常用方法二、DatagramPacket API构造方法常用方法E1:回显服务器的实现E2:带有业务逻辑的请求发送一、DatagramSocket API 在操作系统中,把socket对象当成了一个文件处理。等价于是文件描述符表上的一项。 普通的文件&#xf…

文章目录

    • 一、DatagramSocket API
      • 构造方法
      • 常用方法
    • 二、DatagramPacket API
      • 构造方法
      • 常用方法
    • E1:回显服务器的实现
    • E2:带有业务逻辑的请求发送

一、DatagramSocket API

在操作系统中,把socket对象当成了一个文件处理。等价于是文件描述符表上的一项。

普通的文件,对应的硬件设备是硬盘,而socket文件,对应的硬件设备是网卡。

【网卡:是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。】

这也体现了计算机资源一切皆文件的理念。

如果要和多个不同的主机进行通信,就需要创建多个socket对象。

构造方法

方法签名说明
DatagramSocket()创建一个UDP数据报套接字的Socket,绑定到本机任意一个随机端口 (一般用于客户端)
DatagramSocket(int port)创建一个UDP数据报套接字的Socket,绑定到本机指定的端口(一般用 于服务端)

port是一个端口号,绑定了接收方进程。

那不指定端口号的构造方法呢?此时系统会自动分配一个空闲的端口。

本质上不是进程和端口号建立了联系,而是进程中的socket对象和端口建立了联系。

常用方法

方法签名方法说明
void receieve(DatagramSocket p)从当前套接字对象接受数据报。如果没有接收到会阻塞等待【输出形参数】
void send(DatagramSocket p)从当前套接字对象发送数据包。不会阻塞等待,直接发送
void close()关闭这个数据报套接字对象【类比文件对象关闭,释放资源】

二、DatagramPacket API

它是表示udp中传输的一个报文,构造这个对象,可以指定一些具体的数据进去。

构造方法

方法签名说明
DatagramPacket(byte[] buf,int length)构造接收数据报的对象,接受的数据保存在字节数组(buf)中,接收指定长度(len)
DatagramPacket(byte[] buf,int offset,int length,SocketAddress address)构造一个DatagramPacket以用来发送数据报的对象,发送的数据为字节数组(buf里),从0到指定长度(length)。address指定目的主机ip和端口号 【SocketAddress这个类表示ip+端口号】

常用方法

方法签名说明
InetAddress getAddress()从接收的数据报中,获取发送端主机IP地址;或从发送的数据报中,获取 接收端主机IP地址
int getPort()从接收的数据报中,获取发送端主机的端口号;或从发送的数据报中,取接收端主机端口号
byte[] getData()获取数据报中的数据

可以用一个线程receive,把数据放进阻塞队列中,另一个线程进行处理请求并响应。

手定指定,并不一定数组全部用,但是指定长度全部用,留微操空间。不过现在用的比较少了。

E1:回显服务器的实现

普通服务器和回响服务器的区别:

普通服务器,根据收到的请求个性化的返回对应的响应。

回显服务器,省略了其中的根据请求计算响应,请求是什么,就返回什么。

后者代码里边没有实际业务。而实际上最关键的是根据请求计算响应的环节。

注意事项:

  1. 端口号的设置:服务器可以显示指定,是因为是程序员手中的,是可控的,但是客户端一般是用户的,是不可控的E2:请求响应
  2. 个别参数的指定:①respose.length_字符的个数;respose.getBytes().length是字节的个数②offset是一个偏移量,相当于起始位置

UDP回响服务器代码

public class Code01UDPEchoServer {private DatagramSocket socket=null;//OS提供操作网卡的socket对象//服务器一定要关联上一个端口号!!!不能让它随机分配,方便端口号定位public Code01UDPEchoServer(int port) throws SocketException {socket=new DatagramSocket(port);}public void start() throws IOException {System.out.println("服务器启动!!");//        //存取数据
//        byte[] bytes=new byte[4096];//2^12
//      这里是直接每次new 了
//        int length=0;//因为要服务很多客户端,所以服务器需要一直在就绪状态while (true) {//1.获取客户端发送过来的请求//  receive是一个输出型参数,所以我们需要先构造一个DatagramPacket的对象DatagramPacket requestPacket = new DatagramPacket(new byte[4096], 4096);//类似给人家一个空白的纸条,两个人说悄悄话socket.receive(requestPacket);//由于这里是一个特殊对象,所以一般把它拿出来做成字符串//offset是一个偏移量//这里指定范围,节省构造字符串的空间[指构造有效范围的]String request = new String(requestPacket.getData(), 0, requestPacket.getLength());//2.根据请求计算响应(请求与响应相同)String respose=process(request);//3.把响应写回客户端//将响应字符串转成字节数组//respose.length_字符的个数//respose.getBytes().length是字节的个数//怎么确定响应返回端口——通过getSocketAddressDatagramPacket answerPacket=new DatagramPacket(respose.getBytes(),respose.getBytes().length,requestPacket.getSocketAddress());socket.send(answerPacket);//4.打印本次请求的处理中间结果System.out.printf("[%s:%d] req:%s\n",requestPacket.getAddress().toString(),requestPacket.getPort(),request,respose);//获得ip和端口}}//根据请求计算响应public String process(String request){return request;}public static void main(String[] args) throws IOException {Code01UDPEchoServer udpEchoServer=new Code01UDPEchoServer(1200);udpEchoServer.start();}
}

UDP回响客户端

public class Code02UDPEchoClient {private DatagramSocket socket=null;public Code02UDPEchoClient(String serverip, int serverport) throws SocketException {socket=new DatagramSocket();//不需要显示绑定端口,os随机分配serverIp=serverip;serverPort=serverport;}private String serverIp=null;private Integer serverPort=null;//一次通信,需要有两个ip,两个端口,客户端的ip是环回ip,端口号是操作系统随机分配的;服务器的ip和端口号需要声明public void start() throws IOException {System.out.println("客户端启动!");Scanner scanner = new Scanner(System.in);while (true) {// 1. 从控制台读取要发送的数据System.out.print("> ");String request = scanner.next();if (request.equals("exit")) {System.out.println("bye");break;}// 2. 构造成 UDP 请求, 并发送//    构造这个 Packet 的时候, 需要把 serverIp 和 port 都传入过来. 但是此处 IP 地址需要填写的是一个 32位的整数形式.// 这里的 IP 地址是一个字符串. 需要使用 InetAddress.getByName 来进行一个转换.端口号一直都是integer没关系DatagramPacket requestPacket = new DatagramPacket(request.getBytes(), request.getBytes().length, InetAddress.getByName(serverIp), serverPort);socket.send(requestPacket);// 3. 读取服务器的 UDP 响应, 并解析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 {Code02UDPEchoClient client = new Code02UDPEchoClient("127.0.0.1", 1200);client.start();}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XSqYLyLp-1676721291836)(F:\typora插图\image-20230218194828403.png)]

默认情况下,是只允许运行一个客户端,但是我们可以通过设置同时运行两个客户端的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-refFjdqY-1676721291838)(F:\typora插图\image-20230218195123652.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glSfyeRD-1676721291839)(F:\typora插图\image-20230218195211579.png)]

E2:带有业务逻辑的请求发送

思路:复用之前的echoServer的代码,只需要重写process的逻辑,即修改业务内容。

public class Code03_UdpDictServer extends Code01UDPEchoServer {private Map<String,String> map=new HashMap<>();public Code03_UdpDictServer(int port) throws SocketException {super(port);map.put("dog","小狗");map.put("cat","小猫");map.put("pig","小猪");}public String process(String request){return map.getOrDefault(request,"尚未查出结果");}public static void main(String[] args) throws IOException {Code03_UdpDictServer udpDictServer=new Code03_UdpDictServer(1200);udpDictServer.start();}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LpoUcOGJ-1676721291840)(F:\typora插图\image-20230218194650960.png)]

当然,除了使用map,我们还可以把词存在硬盘上,通过文件io操作直接读到硬盘上,这里就需要修改udpechoserver的start方法了。

http://www.hengruixuexiao.com/news/13643.html

相关文章:

  • 动态网站开发语言的优势与不足朝阳seo排名优化培训
  • 美容院装修河北搜索引擎优化
  • 西宁网站建设报价壹君博贴心惠州网站关键词排名
  • 赤峰微网站建设镇江seo公司
  • 网站怎么做桌面快速链接网络营销个人感悟小结
  • 网站建设优化价格网页制作公司
  • 苏州网站制作哪家好seo基础教程视频
  • 学网站制作重庆seo排名扣费
  • 同一个域名在一个服务器做两件网站国外网站怎么推广
  • 宁德城乡建设网站凯里seo排名优化
  • 物流wap网站模板免费下载百度并安装
  • 做直播网站用什么语言百度竞价渠道代理商
  • 做网站付多少定金搜狗权重查询
  • 做传奇网站百度百科官网入口
  • 万网 网站 流程自己代理一款手游需要多少钱
  • 知名的电子商务网站域名查询网站入口
  • 简单做任务赚钱网站公司网站如何推广
  • 公司门户网站是什么朋友圈营销
  • 百度推广如何办理seo顾问咨询
  • 扬州专业做网站百度收录平台
  • 网站上线确认书今日十大热点新闻头条
  • 北京网站搭建方案奶茶推广软文200字
  • 公众平台官网登录入口seo排名优化教学
  • 寺院网站建设百度2019旧版本下载
  • 珠海网站建设工程北京seo技术
  • 九一赣州人才网找工作站优云seo优化
  • dw手机网站怎么做泉州排名推广
  • 为什么网站浏览不是做的那样seo优化分析
  • 龙采科技做网站多少钱今日重大军事新闻
  • 昆山网站开发建设公司自己如何制作一个网页