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

网站是怎么赢利的洛阳市住房和城乡建设网站

网站是怎么赢利的,洛阳市住房和城乡建设网站,wordpress hls,简易个人网页模板目录 一.回显服务器的基本概念 二.回显服务器的简单示意图 三.实现回显服务器(基于UDP)必须要知道的API 1.DatagramSocket 2.DatagramPacket 3.InetSocketAddress 4.二者区别 1. 功能职责 2. 核心作用 3. 使用场景流程 四.实现服务器端的主…

目录

一.回显服务器的基本概念

二.回显服务器的简单示意图

三.实现回显服务器(基于UDP)必须要知道的API 

1.DatagramSocket

2.DatagramPacket 

3.InetSocketAddress

4.二者区别 

1. 功能职责

2. 核心作用

3. 使用场景流程

四.实现服务器端的主要思路 

代码部分如下

实现服务器端的注意事项 

五.实现客户端的主要思路

实现客户端的注意事项 

六.完整代码 

运行测试结果 


一.回显服务器的基本概念

回显服务器(Echo)可以看成是网络编程中的"hello world",是学习网络编程的入门。简单介绍一下,回显服务器就是服务端收到什么,就给客户端发送什么。我会基于UDP来实现一个回显服务器。

二.回显服务器的简单示意图

三.实现回显服务器(基于UDP)必须要知道的API 

1.DatagramSocket

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

void receive(DatagramPacket p)

   

从此套接字接收数据报(如果没有接收到数据报,该方法会阻塞等待
void send(DatagramPacket p)从此套接字发送数据报(不会阻塞等待,直接发送)
void close()关闭此数据报套接字

2.DatagramPacket 

方法签名方法说明
DatagramPacket(byte[] buf, int length)构造一个DatagramPacket以用来接收数据报,接收的数据保存在字节数组(第一个参数buf)中,接收指定长度(第二个参数length
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)构造一个DatagramPacket以用来发送数据报,发送的数据为字节数组(第一个参数buf)中,从0到指定长度(第二个参数length)。address指定目的主机的IP和端口号
InetAddress getAddress()从接收的数据报中,获取发送端主机IP地址;或从发送的数据报中,获取接收端主机IP地址
int getPort()从接收的数据报中,获取发送端主机的端口号;或从发送的数据报中,获取接收端主机端口号
byte[] getData()获取数据报中的数据

3.InetSocketAddress

方法签名方法说明
InetSocketAddress(InetAddress addr, int port)创建一个 Socket 地址,包含 IP 地址和端口号

4.二者区别 

1. 功能职责

  • DatagramSocket:是套接字类,相当于 “码头”,负责发送、接收DatagramPacket数据报,还能绑定端口、管理网络连接(虽 UDP 无连接,但它提供收发的基础通道 ),比如通过send发送数据报、receive接收数据报,close关闭套接字。
  • DatagramPacket:是数据报类,相当于 “集装箱”,负责封装 UDP 通信中要发送或接收的数据,包含数据内容、数据长度,以及发送 / 接收时的目标地址(IP + 端口 )或源地址信息。

2. 核心作用

  • DatagramSocket聚焦网络收发操作,决定 “怎么传”(用哪个端口、怎么建立收发通道 );
  • DatagramPacket聚焦数据封装,决定 “传什么”(数据内容 )和 “传给谁 / 从哪收”(地址信息 ) 。

3. 使用场景流程

UDP 通信时,先创建DatagramSocket作为收发的 “通道”,再创建DatagramPacket封装数据 / 地址,最后通过DatagramSocketsend/receive完成数据收发 。比如客户端用DatagramSocket发送封装了数据和目标地址的DatagramPacket;服务器端用DatagramSocket绑定端口,接收包含数据和源地址的DatagramPacket 。

四.实现服务器端的主要思路 

1.读取请求并解析

2.根据请求,计算响应

3.把响应返回给客户端

4.打印日志(方便观察)

代码部分如下

public void start() throws IOException {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);//4.打印日志System.out.printf("[%s:%d,request:%s response:%s]\n",requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);}}

实现服务器端的注意事项 

五.实现客户端的主要思路

1.在控制台读取用户要输入的内容

2.把请求发送给服务器

3.发送请求数据包给服务器端

4.接收服务器端的响应

5.把从服务器读取的数据进行解析,打印出来

  public void start() throws IOException {Scanner scanner=new Scanner(System.in);while(true){System.out.println("请输入内容");//按ctrl+d会breakif(!scanner.hasNext()){break;}//1。从控制台读取用户要输入的内容String resquest=scanner.next();//2.把请求发送给服务器DatagramPacket resquestPacket=new DatagramPacket(resquest.getBytes(),resquest.getBytes().length,InetAddress.getByName(ServerIp),ServerPort);
//            socket.receive(resquestPacket);//3.发送请求数据包给服务器端socket.send(resquestPacket);//4.接收服务器端的响应DatagramPacket responsePacket=new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);//5.把从服务器读取的数据进行解析,打印出来String response=new String(responsePacket.getData(),0,responsePacket.getLength());System.out.println(response);}}

实现客户端的注意事项 

六.完整代码 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;public class UdpEchoClient {private DatagramSocket socket=null;//记录ip与端口号private String ServerIp;private int ServerPort;//服务器的ip与端口号public UdpEchoClient(String ServerIp,int ServerPort) throws SocketException {this.ServerIp=ServerIp;this.ServerPort=ServerPort;//客户端这里的端口号等到操作系统随机分配socket=new DatagramSocket();}public void start() throws IOException {Scanner scanner=new Scanner(System.in);while(true){System.out.println("请输入内容");//按ctrl+d会breakif(!scanner.hasNext()){break;}//1。从控制台读取用户要输入的内容String resquest=scanner.next();//2.把请求发送给服务器DatagramPacket resquestPacket=new DatagramPacket(resquest.getBytes(),resquest.getBytes().length,InetAddress.getByName(ServerIp),ServerPort);
//            socket.receive(resquestPacket);//3.发送请求数据包给服务器端socket.send(resquestPacket);//4.接收服务器端的响应DatagramPacket responsePacket=new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);//5.把从服务器读取的数据进行解析,打印出来String response=new String(responsePacket.getData(),0,responsePacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {UdpEchoClient udpEchoClient=new UdpEchoClient("127.0.0.1",1777);udpEchoClient.start();}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
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 {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);//4.打印日志System.out.printf("[%s:%d,request:%s response:%s]\n",requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);}}//将private改为public,方便方面有新功能,可以进行重写public String process(String request) {return request;}public static void main(String[] args) throws IOException {UdpEchoServer udpEchoServer=new UdpEchoServer(1777);udpEchoServer.start();}
}

运行测试结果 


文章转载自:

http://Rvti6WDf.zpzys.cn
http://cSQmiAsD.zpzys.cn
http://SwWcqQpt.zpzys.cn
http://ZgMhvn2R.zpzys.cn
http://tFH7FZHM.zpzys.cn
http://OCVbKnXp.zpzys.cn
http://GNBD8DPA.zpzys.cn
http://vab78E0F.zpzys.cn
http://xNzi41hL.zpzys.cn
http://jRO2iwEC.zpzys.cn
http://HRbJG6M3.zpzys.cn
http://JFat39FA.zpzys.cn
http://VvDbrI0m.zpzys.cn
http://jvV4yQYH.zpzys.cn
http://FmSQn52B.zpzys.cn
http://wgZvpQtE.zpzys.cn
http://7HM9ItCn.zpzys.cn
http://CTgNylMy.zpzys.cn
http://5xl3kZjC.zpzys.cn
http://zzNyApCW.zpzys.cn
http://b9EyNNym.zpzys.cn
http://uW10YFqQ.zpzys.cn
http://zn3kopTl.zpzys.cn
http://I6KedF1W.zpzys.cn
http://RjND8oeE.zpzys.cn
http://k5EXdspt.zpzys.cn
http://R7PXxkDe.zpzys.cn
http://fTYTh5mi.zpzys.cn
http://3afE4669.zpzys.cn
http://MKVS6D1W.zpzys.cn
http://www.dtcms.com/wzjs/780338.html

相关文章:

  • 外贸网站好做吗外包加工网app
  • 南充市房地产网官方网站企业网站建设 法规
  • ps怎样做网站设计制作宣传册的步骤
  • 淮安网站制作多少钱学校免费网站建设
  • 安徽建设银行官方网站网站兼容性是什么意思
  • 网站建设哪个比较好西部数码网站管理助手3.0
  • 如何做自己的业务网站龙岩企业网站建设制作
  • 淮安软件园网站建设网站后台管理系统 英文
  • 安全员怎么网站中做备案白城学做网站
  • 做外贸的都有那些网站中小企业信息查询系统
  • 创建好网站如何把浏览网站做优化有必要吗
  • 网站制作教程图解wordpress调用同分类最新文章
  • 手机网站建设 jz.woonl石家庄那有建网站
  • 有服务器域名源码怎么做网站平台产品设计平台
  • 建设地方性宠物网站网站建设链接
  • 个人网站申请备案北京死亡病例详情
  • 自己搭建视频播放网站江苏省住房与城乡建设部网站
  • 奉贤网站开发双语企业网站源码
  • 网站建设新闻中心做网站的怎么跑业务
  • wap网站psd重庆城乡建设局网站
  • 做全房订制网站公司网站安全保障机制如何做
  • 网站开发人员招聘it管理宝塔wordpress经常502
  • 中国空间站进展dw可以做网站后台吗
  • 网站制作的基础凡客诚品的衣服什么档次
  • 网站建设哪些好番禺网站建设价格
  • 广州海外建站外国人做的中国字网站
  • 网站图片要求临沂建网站哪家好
  • 定制设计网站深圳高速建设有限公司
  • 云南专业建网站建行个人网上银行登录入口官网
  • 专门做中式装修的网站网站文章正文可以做内链吗