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

百度上传网站服务器美客多电商平台入驻条件

百度上传网站服务器,美客多电商平台入驻条件,家用电器行业外贸建站,1688app官方下载Socket 套接字 我们软件工作者#xff0c;着重编写的是应用层的代码#xff0c;但是发送这个数据#xff0c;我们就需要将应用层传输到传输层#xff0c;也就意味着我们需要调用应用层的API#xff0c;统称为 Socket API。 套接字的分类#xff1a; 流套接字#xff…Socket 套接字 我们软件工作者着重编写的是应用层的代码但是发送这个数据我们就需要将应用层传输到传输层也就意味着我们需要调用应用层的API统称为 Socket API。 套接字的分类 流套接字使用传输层TCP协议 特点 有连接使用 TCP 通信的双方需要时刻保存对方的相关消息可靠传输尽可能的将数据传输过去如果没有传输过去自己也知道没有传输然后通过设定可以重新传输面向字节流以字节为传输的基本单位读写方式更为灵活全双工一条路径双向通信 数据报套接字使用传输层UDP协议 特点 有连接使用 UDP 通信的双方不需要时刻保存对方的相关消息不可靠传输只关注是否传输了数据至于是否传输成功并不专注面向数据报以一个UDP数据报为基本单位全双工一条路径双向通信 原始套接字原始套接字用于自定义传输层协议用于读写内核没有处理的IP协议数据。 所有特点自己定义 什么是全双工和半双工 全双工一条路径双向通信 半双工一条路径单向通信 网络传输数据的基本单位报Datagram、包Packet、段Segment、帧Frame Socket 对象相当于系统中Socket文件这个文件并非对应到硬盘上的某个数据存储区域而是对应到网卡这个硬件设备 往这个Socket·对象中写数据相当于通过网卡发送消息从这个Socket·对象中读数据相当于通过网卡接收消息 这个图不是我画摘抄了网上现有的 数据报套接字UDP java中使用UDP协议通信主要基于 DatagramSocket 类来创建数据报套接字并使用DatagramPacket 作为发送或接收的UDP数据报 。DatagramSocket 是UDP Socket用于发送和接收UDP数据报。 DatagramSocket API DatagramSocket 构造方法 DatagramSocket 方法 DatagramPacket APIDatagramPacket是UDP Socket发送和接收的数据报 DatagramPacket 构造方法 DatagramPacket 方法 构造UDP发送的数据报时需要传入 SocketAddress 该对象可以使用 InetSocketAddress 来创 建 InetSocketAddress API InetSocketAddress SocketAddress 的子类 构造方法 UDP服务器 注意 服务器的端口必须不变客户端这边则不需要手动指定系统自动分配socket是文件也需要关闭 public class UdpServer { //服务器socket要绑定固定的端口 private static final int PORT 8888; public static void main(String[] args) throws IOException { // 1.创建服务端DatagramSocket指定端口可以发送及接收UDP数据报 DatagramSocket socket new DatagramSocket(PORT); //不停的接收客户端udp数据报 while (true){ // 2.创建数据报用于接收客户端发送的数据 byte[] bytes new byte[1024];//1m1024kb, 1kb1024byte, UDP最多64k包含UDP首部8byte DatagramPacket packet new DatagramPacket(bytes, bytes.length); System.out.println(---------------------------------------------------); System.out.println(等待接收UDP数据报...); // 3.等待接收客户端发送的UDP数据报该方法在接收到数据报之前会一直阻塞接收到数据报以后DatagramPacket对象包含数据bytes和客户端ip、端口号 socket.receive(packet); System.out.printf(客户端IP%s%n, packet.getAddress().getHostAddress()); System.out.printf(客户端端口号%s%n, packet.getPort()); System.out.printf(客户端发送的原生数据为%s%n, Arrays.toString(packet.getData())); System.out.printf(客户端发送的文本数据为%s%n, new String(packet.getData())); } } }一旦服务器一起动调用start方法就会立即执行到receive这里但是如果此时还有没有客户端发来的数据receive就会阻塞等待一直持续到有数据发过来。 细节网卡这里收到数据就会进行分用解析UDP这一层 看到端口号然后将数据放入接收缓冲区然后将数据到了参数中的DatagramSocket 对象中 UDP客户端 public class UdpClient { // 服务端socket地址包含域名或IP及端口号 private static final SocketAddress ADDRESS new InetSocketAddress(localhost, 8888); public static void main(String[] args) throws IOException { // 4.创建客户端DatagramSocket开启随机端口就行可以发送及接收UDP数据报 DatagramSocket socket new DatagramSocket(); // 5-1.准备要发送的数据 byte[] bytes hello world!.getBytes(); // 5-2.组装要发送的UDP数据报包含数据及发送的服务端信息服务器IP端口号 DatagramPacket packet new DatagramPacket(bytes, bytes.length, ADDRESS); // 6.发送UDP数据报 socket.send(packet); } }TCP流套接字编程 ServerSocket API ServerSocket 是创建TCP服务端Socket的API。 ServerSocket 构造方法 ServerSocket 方法 accept意思就是接受本质上是三次握手后面的文章会说。 Socket API Socket 是客户端 Socket或服务端中接收到客户端建立连接accept方法的请求后返回的服务端Socket。 不管是客户端还是服务端Socket都是双方建立连接以后保存的对端信息及用来与对方收发数据的。 Socket 构造方法 host 表示服务器的 IP 地址port 表示服务器的端口 Socket 方法 从InputStream这里读数据就相当于从网卡接收往OutputStream这里写数据就相当于从网卡发送 TCP的长短连接 TCP发送数据时需要先建立连接而什么时候关闭连接就决定是短连接还是长连接。 短连接每次接收数据并返回响应后都关闭连接。也就是说短连接只能一次收发。 连接客户端和服务器对于客户端来说。要发送一个请求然后接收一个响应对于服务器来说。会收到一个请求然后返回一个响应然后关闭连接 长连接不关闭连接一直保持连接状态双方不停的收发数据即是长连接。也就是说长连接可以 多次收发数据 连接客户端和服务器可以客户端一直发送请求并获取服务器的响应可以服务器一直发送请求并获取客户端的响应没有一方主动停止不关闭 长连接和短连接的区别 建立连接、关闭连接的耗时短连接每次请求、响应都需要建立连接关闭连接而长连接只需要第一次建立连接之后的请求、响应都可以直接传输。相对来说建立连接关闭连接也是要耗时的长连接效率更高。主动发送请求不同短连接一般是客户端主动向服务端发送请求而长连接可以是客户端主动发送请求也可以是服务端主动发。两者的使用场景有不同短连接适用于客户端请求频率不高的场景如浏览网页等。长连接适用于客户端与服务端通信频繁的场景如聊天室实时游戏等。 实现一个简单回显服务器 public class TcpEchoServer {//serverSocket 就是外场拉客的小哥(类似集合),只有一个//clientSocket 内场服务的人(),会给每个客服分配一个private ServerSocket serverSocketnull;//1public TcpEchoServer(int port) throws IOException {serverSocketnew ServerSocket(port);}public void start() throws IOException {ExecutorService executorService Executors.newCachedThreadPool();System.out.println(服务器启动);while (true){Socket clientSocketserverSocket.accept();//如果直接调用,该方法会影响这个循环的二次执行.导致accept不及时了//创建新的线程,用新的线程来调用processConnetion//每次来一个新的客户端都搞一个新的线程即可 /* Thread tnew Thread(()-{try {processConnection(clientSocket);} catch (IOException e) {throw new RuntimeException(e);}});t.start();*///创建一个线程池,从池子中拿取线程executorService.submit(new Runnable() {Overridepublic void run() {try {processConnection(clientSocket);} catch (IOException e) {throw new RuntimeException(e);}}});}}//通过这个方法处理一个链接//读取请求//根据请求计算响应//把响应返回给客户端private void processConnection(Socket clientSocket) throws IOException {System.out.printf([%s:%d] 客户端上线!\n,clientSocket.getInetAddress().toString(),clientSocket.getPort());try(InputStream inputStreamclientSocket.getInputStream();OutputStream outputStreamclientSocket.getOutputStream()) {//没有这两个也可以,但是代价就是得一个字节一个字节的处理,找到那个是结束符//将字节流包装成了字符流Scanner scannernew Scanner(inputStream);PrintWriter printWriternew PrintWriter(outputStream);while (true){//3//读取请求if (!scanner.hasNext()){//读取的流到了结尾了System.out.printf([%s:%d] 客户端下线,clientSocket.getInetAddress().toString(),clientSocket.getPort());break;}//直接使用scanner读取一段字符串String requestscanner.next();//往后读,一直读到空白符,空格,换行,翻页符....都算空白符//5//根据请求计算响应String responseprocess(request);//把响应返回给客户端printWriter.println(response);//刷新缓冲区printWriter.flush();System.out.printf([%s:%d] req:%s; resp:%s\n,clientSocket.getInetAddress().toString(),clientSocket.getPort(),request,response);}} catch (IOException e) {throw new RuntimeException(e);}finally {clientSocket.close();}}private String process(String request) {return request;}public static void main(String[] args) throws IOException {TcpEchoServer tcpEchoServernew TcpEchoServer(9090);tcpEchoServer.start();}}补充一点 硬件的读写速度 内存 硬盘 网卡 读写硬盘和网卡口可以视为 IO 操作。 printWriter.println(response);----》写网卡 因为网卡读写速度慢如果平凡的写入读出对于效率太慢了。为了提高IO操作的效率此时就需要引入一个内存构成的缓冲区。等缓冲区达到一定数量就统一写入网卡中。 缓存cache缓冲区buffer 缓存只能读缓冲区可以读也可以写。
http://wiki.neutronadmin.com/news/323493/

相关文章:

  • 莱芜建设网站二级域名可以做淘客网站
  • 中核五公司是国企还是央企成都正规搜索引擎优化
  • 合肥 网站运营湘潭做网站推荐磐石网络
  • 重庆市建设工程造价管理协会网站建设银行不良资产处置网站
  • 中国建设银行官网站信用卡管理手机版网站开发实例
  • html5 网站logo虞城县住房和城乡建设局网站
  • 用网站的源代码怎么做网站wordpress敏感词大全
  • 网站做镜像是什么中国白云手机网站建设
  • 企业制作网站公司网站建设竞标ppt
  • 做房产的一般用哪个网站好域名之后怎么做网站
  • 网站开发php工程师中国数据网站空间
  • 门户网站建设工作的自查报告wordpress启用域名邮
  • dede网站如何做中英文版本山西建设工程协会网站
  • 可视化课题组网站建设教程河源新闻最新消息
  • 网站建设作品图片互联网网站开发html5
  • 中国做的最好的网站建设公司渝北网站建设
  • 怎么做qq刷会员的网站提升审美的网站
  • 江门网站制作报价wordpress网页提速
  • 网站备案密码查询自己做的网站怎么取sql数据
  • 宣武郑州阳网站建设做好网站如何发布
  • 网站显示危险网站要怎么做蜜雪冰城网络营销
  • 制作什么网站好wordpress+开发入门
  • 新站整站优化wordpress 遍历分类
  • 网站备案字号网站集约化建设必要性
  • 桃浦做网站南京原创网站建设怎么联系
  • 婚庆类网站模板天津市建设工程交易网
  • 网站后期的维护和更新红网
  • 河北建筑工程信息网站潍坊市网站建设设计
  • python官网志鸿优化网官网
  • 做网站需要什么特色成都制作网页设计