网站建设案例怎么样做淘宝客网站服务器

news/2025/9/30 0:30:42/文章来源:
网站建设案例怎么样,做淘宝客网站服务器,网页设计的毕业设计,东莞市哪里有做网站公司目录 1.网络编程 2.Echo模型#xff08;服务器与客户端实现通信#xff09; 3.BIO处理模型(实现多用户访问同个服务器) 4.UDP程序 1.网络编程 有两种通信模型 C/S(Client/Server)基于客户端和服务器端#xff0c;实现代码时候需要实现客户端与服务器端 B/S(Browser/S…目录 1.网络编程 2.Echo模型服务器与客户端实现通信 3.BIO处理模型(实现多用户访问同个服务器) 4.UDP程序 1.网络编程 有两种通信模型 C/S(Client/Server)基于客户端和服务器端实现代码时候需要实现客户端与服务器端 B/S(Browser/Server)基于Http网页和服务器端实现时候只需要实现服务器端即可 2.Echo模型服务器与客户端实现通信 所谓Echo模型就是指的是客户端发送消息到服务器端服务器接收到消息然后将客户端接收到的信息进行回送到客户端。所以需要编写两个端口一个客户端一个服务器端。java中可以使用Socket类实现用户端客户端与ServerSocket类服务器端 Socket与ServerSocket都是基于TCP有连接的可靠的传输服务 Socket类(客户端)的常用方法 方法描述public Socket(String host, int port)创建一个套接字连接到指定主机名和端口号public OutputStream getOutputStream()返回此套接字的输出流用于向服务器发送数据一般使用PrintStreampublic InputStream getInputStream()返回此套接字的输入流用于从服务器接收数据 ServerSocket类(服务器端)的常用方法 方法描述ServerSocket(int port)创建一个服务器套接字绑定到指定的端口号Socket accept()监听并接受客户端的连接请求返回一个与客户端通信的新的 Socket 对象void close()关闭服务器套接字停止监听客户端连接请求 Echo模型实现案例代码1.服务器端代码实现 package Example1903;import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; import java.util.Scanner;//服务器端 public class javaDemo {public static void main(String[] args) throws Exception{Date date new Date();ServerSocket server new ServerSocket(9999);System.out.println(等待客户端运行--------);Socket client server.accept();// 设置服务器的输入输出流保证能接收信息与输入信息Scanner scanner new Scanner(client.getInputStream());PrintStream out new PrintStream(client.getOutputStream());// 接收信息并且将信息传入out输出流boolean flag true;scanner.useDelimiter(\n);while (flag){if (scanner.hasNext()){String value scanner.next().trim();if (byebye.equalsIgnoreCase(value)){out.println(ByeBye);flag false;}else out.println(date [服务器]发送消息:value);}} // 关闭所有服务server.close();client.close();scanner.close();out.close();} }2.客户端代码实现 package Example1904;import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.util.Date; import java.util.Scanner;//客户端 public class javaDemo { // 通过键盘输入信息private static final BufferedReader KEYBOARD_INPUT new BufferedReader(new InputStreamReader(System.in));public static String getString(String promp) throws Exception{System.out.print(promp);String str KEYBOARD_INPUT.readLine();return str;}public static void main(String[] args)throws Exception {Date date new Date();Socket client new Socket(localhost,9999);// 获取同样的输入输出对象Scanner scanner new Scanner(client.getInputStream());PrintStream out new PrintStream(client.getOutputStream());scanner.useDelimiter(\n);//使用分隔符boolean flag true;while (flag){String input getString( date [客户端]请输入要发送的信息:).trim();out.println(input);//将input内容放入PrintStream流中if (scanner.hasNext()){System.out.println(scanner.next());}if (byebye.equalsIgnoreCase(input)){flag false;}}} }服务器端运行结果 客户端运行结果: 代码流程 服务器端启动并等待连接服务器启动后通过 ServerSocket 监听指定端口此处为9999并调用 accept 方法等待客户端连接。一旦有客户端连接成功服务器会创建一个新的线程来处理与该客户端的通信。 客户端连接服务器客户端通过 Socket 构造函数连接到指定的服务器地址此处为 localhost和端口号此处为 9999。 客户端发送消息客户端通过 getString 方法获取用户输入的消息并将消息通过 PrintStream 的 println 方法发送给服务器。 服务器接收消息服务器端在自己的线程中通过 Scanner 的 next 方法读取客户端发送的消息。 服务器处理消息服务器端根据接收到的消息进行相应的处理可以是对消息进行解析、判断、计算等操作。在这个示例中服务器端简单地将接收到的消息原样发送回客户端。 服务器返回消息服务器通过 PrintStream 的 println 方法将处理后的消息发送给客户端。 客户端接收消息客户端通过 Scanner 的 next 方法读取服务器返回的消息并将其打印到控制台。 重复步骤3-7直到客户端发送byebye表示结束通信。 答疑 问1两个代码是如何实现通信的 首先两个进程之间的通信一定需要接收好对应的端口计算机网络应用层知识才能进行通信然后两个代码共用了输入输出流(可以理解为两个人用了同一条电话线)客户端通过其输出流out将信息输出到服务器端对于服务器外部输入就是输入流即输出流变成了服务器的输入流服务器通过scanner输入流接收客户端输出流的信息同理服务器也通过其输出流输出到客户端客户端接收到信息就输出 问2scanner.useDelimiter(\n);useDelimiter方法知道是设置分隔符但是搭配\n是有什么作用吗? scanner.useDelimiter(\n); 设置了扫描器的分隔符为\n即换行符。这样做的作用是让扫描器以每一行作为一个输入元素而不是以空白字符默认情况下作为分隔符。在这个示例中服务器和客户端之间通过换行符来分隔消息的发送和接收。 问3为什么要用到PrintStream正常的输出System.out.println代替不可以吗 可以使用System.out.println 来替代PrintStream它们都用于向控制台输出内容。示例代码中使用 PrintStream 是为了将客户端发送给服务器的消息发送出去以及将服务器返回的消息打印到客户端的控制台。 问4服务器端用Scanner(socket.InputStream)是为了获取客户端数据这个可以理解但是客户端为什么也是用Scanner(socket.InputStream)也是获取客户端 在客户端和服务器端都使用 Scanner(socket.getInputStream()) 是因为它们需要从对应的套接字socket的输入流中读取数据。客户端需要读取服务器发送过来的消息而服务器需要读取客户端发送过来的消息。 问5为什么要有private static final BufferedReader KEYBOARD_INPUT new BufferedReader(new InputStreamReader(System.in));代码不能直接通过ScannerSystem.in替代吗 private static final BufferedReader KEYBOARD_INPUT new BufferedReader(new InputStreamReader(System.in)); 这段代码定义了一个静态的、只读的 BufferedReader 类型的变量通过 System.in 将键盘输入流与该变量关联起来。这样做的目的是为了在客户端使用 KEYBOARD_INPUT.readLine() 来获取用户输入的字符串。由于 Scanner(System.in) 是使用缓冲区扫描输入并不能满足逐行读取的需求因此需要使用 BufferedReader 来实现。 3.BIO处理模型(实现多用户访问同个服务器) 由于上一个模型里面一段时间只能有一个用户与服务器进行交互并且一旦用户输入byebye服务器也就随之关闭但是如果我想要有多个用户去与服务器交互那么该如何实现呢所以引入了BIO处理模型。 如图结构可以知道其解决方法是在ServeSocket内部创建多个Socket实例并且将每一个Socket实例都封装在一个线程内实现多线程通信当有用户连接时候就创建一个独立的通信线程每个用户可以独立关闭自己的线程 所以只需要修改服务器端的代码 服务器端 package Example1907;import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner;class EchoServer implements Runnable { // 初始化Socket client null;Scanner scanner null;PrintStream out null;boolean flag true;// 传入通信对象实现创建输入输出流与确认客户端对象public EchoServer(Socket client){try {this.client client;this.scanner new Scanner(client.getInputStream());this.out new PrintStream(client.getOutputStream());}catch (Exception e){e.printStackTrace();}} // 实现通信Overridepublic void run() {while (this.flag){String value scanner.nextLine().trim();if (value.equalsIgnoreCase(byebye)){this.flag false;out.println(Bye Bye~);}else {out.println([服务器端]:value);}} // 实现完通信则关闭所有服务try {scanner.close();out.close();client.close();}catch (Exception e){e.printStackTrace();}}} //服务器端 public class javaDemo {public static void main(String[] args) throws Exception {ServerSocket server new ServerSocket(9999);boolean flag true;System.out.println(等待客户端连接---------); // 通过多线程接收多个客户端while (flag){Socket client server.accept();new Thread(new EchoServer(client)).start();}}}客户端还是一样的这里可以锻炼自己重写一遍代码 package Example1908;import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.util.Scanner;//客户端 public class javaDemo {private static final BufferedReader KEYBOARD_INPUT new BufferedReader(new InputStreamReader(System.in));public static String getString(String promp)throws Exception{System.out.print(promp);String input KEYBOARD_INPUT.readLine().trim();return input;}public static void main(String[] args) throws Exception{Socket client new Socket(localhost,9999);Scanner scanner new Scanner(client.getInputStream());PrintStream out new PrintStream(client.getOutputStream());scanner.useDelimiter(\n);boolean flag true;while (flag){String msg getString([客户端]请输入你想要发送的消息).trim();out.println(msg);if (scanner.hasNext()){System.out.println(scanner.next().trim());}if (byebye.equalsIgnoreCase(msg)){flag false;}}scanner.close();out.close();client.close();} }效果展示 服务器端 以下javaDemo2是用户1javaDemo4是用户2 客户端1 客户端2 这种模型是BIO模式但是可以发现这里没有对线程数量的限制也就意味着一旦用户数量急剧增加的时候就会出现性能大幅下降的情况所以需要追加对线程的限制 也就是真正的BIOBlocking Io 阻塞Io的模式 4.UDP程序 UDP传输与Tcp不同的是其面向的是无连接的不可靠的通信如果Tcp是打电话必须要知道对方号码建立连接才能进行通信那么UDP就是在大街上随便喊一嗓子有些人就听得到你说的话也有些人离你太远听不到但是你并不在乎。 这种传输方式常用于游戏之中所谓的丢包就是因为udp并不可靠出现的问题但是这种传输方式非常快延迟低。 UDP常用类有 DatagramPackage的常用方法 方法名描述public DatagramPacket(byte[] buf, int length)构造一个 DatagramPacket 对象使用指定的字节数组作为数据指定的长度作为有效数据的长度。public byte[] getData()获取该 DatagramPacket 对象中的数据字节数组。public int getLength()获取该 DatagramPacket 对象中数据的长度。 DatagramSocket的常用方法 方法名描述DatagramSocket()创建一个未绑定的数据报套接字。DatagramSocket(int port)创建一个绑定到指定端口的数据报套接字。DatagramSocket(int port, InetAddress address)创建一个绑定到指定端口和指定本地 IP 地址的数据报套接字。void send(DatagramPacket packet)发送指定的数据包到目的地。void receive(DatagramPacket packet)接收一个数据包并将其存储在指定的数据包对象中 以下案例实现一个客户端通过udp发送报文到服务器并输出服务器返回值 在上一个服务器开着的前提下 package Example1910;import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.nio.charset.StandardCharsets;public class javaDemo {public static void main(String[] args)throws Exception { // 通过键盘输入数据System.out.println(请输入你想要发送的数据);BufferedReader input new BufferedReader(new InputStreamReader(System.in));String data input.readLine(); // 发送数据包DatagramSocket client new DatagramSocket(9999);DatagramPacket packet new DatagramPacket(data.getBytes(StandardCharsets.UTF_8),0,data.length(), InetAddress.getByName(localhost),9999);client.send(packet); // 接收数据包byte redata[] new byte[1024];DatagramPacket repacket new DatagramPacket(redata,0,redata.length);client.receive(repacket);System.out.println(接收的数据是new String(redata,0,redata.length,StandardCharsets.UTF_8));client.close();} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大二学计算机系统基础

大二学计算机系统基础平台:IA-64 + linux + C + gcc在 linux 系统中:gdb 在 Macintosh OS 上:lldb编译器:以机器码为目标 操作系统:管理进程状态x86-64(又称 x64、AMD64) x86 架构的 64 位扩展 指令集的 64位版…

目前哪些企业需要做网站建设的呢w7系统那个网站做的好

我相信命理,但我不相信在床脚钉四个铜钱就可以保证婚姻幸福、白首偕老。 我相信风水,但我不相信挂一个风铃、摆一个鱼缸就可以使人财运亨通、官禄无碍。 我相信人与环境中有一些神秘的对应关系,但我不相信一个人走路时先跨走左脚或右脚就可以…

阿里云模板建站教程网站的种类

常数 值 描述 vbCr Chr(13) 回车符。 vbCrLf Chr(13) & Chr(10) 回车符与换行符。 vbFormFeed Chr(12) 换页符;在 Microsoft Windows 中不适用。 vbLf Chr(10) 换行符。 vbNewLine Chr(13) & Chr(10) 或 Chr(10) 平台指定的新行字符;适用于…

免费做网站app怎么做页面跳转

参考链接&#xff1a; 反转Java中的字符串String 一、java字符串的反转 1.利用java字符串的拼接实现字符串的反转&#xff0c;代码如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …

20250929 之所思 - 人生如梦

20250929 之所思最近事情发生的有点多,思绪有点混乱。9.23 台风来临,9.24 居家办公一天;9.27日因为26日晚没有控制好时间几乎通宵,迷迷糊糊的度过了一天,9.28日又补班,整个节奏很混乱,加上最近休假的同事特别多…

9/29

今日学习了Java中的出题系统,使用了子方法的方法写代码,让我收获颇丰,明日继续

聊城专业建网站价格中国建设银行官网站住房公积金

Redis 作为一个高性能的分布式缓存系统,广泛应用于后端开发中,因此在后端研发面试中,关于 Redis 的问题十分常见。 本文整理了30个常见的 Redis 面试题目,涵盖了 Redis 的源码、数据结构、原理、集群模式等方面的知识,并附上简要的回答,帮助大家更好地准备相关的面试。 …

9.9元包邮网站怎么做昆明做网站的网络公司

首先&#xff0c;先介绍两种引入模块的方法。 法一&#xff1a;将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二&#xff1a;只引入某个文件中一个类/函数/变量 需要从某个文件中引入多个函数或变量时&#xff0c…

河南网站排名优化wordpress 响应速度

文章目录 切片的诞生&#xff1a;数组的延伸切片的结构初始化切片 切片的内存管理扩容机制 实例分析&#xff1a;切片的动态特性切片与性能性能对比 切片的并发安全并发场景下的切片操作 切片与接口切片与空接口 切片的遍历与操作遍历切片切片的切片操作 切片的垃圾回收切片的生…

昆山科技网站建设达州网站建设公司

为了使用你提到的封装方式来创建一个包含多个 Data 对象的列表并使用 DataLoader 来加载这些数据&#xff0c;我们可以按照以下步骤进行&#xff1a; 创建数据&#xff1a;生成节点特征矩阵、边索引矩阵和标签。封装数据&#xff1a;使用 Data 对象将这些数据封装起来。使用 D…

怎么制作学校网站徐州百姓网

防水涂料和施工堵漏的“五大技巧”和“九个细节”很多业主会在留言里问我家里水管堵了、房顶渗水怎么办&#xff0c;所以防水问题不可忽视。让您住的安心&#xff0c;您楼下的邻居也住的安心。对于防水问题&#xff0c;一定要在最初进行装修的时候就特别注意。下面这些是专业人…

如何设计个人网站响应式网站和自适应

前情回顾&#xff1a;i操作并不是原子操作&#xff0c;因此多线程下会达不到预期的效果&#xff0c;需要通过加锁或AtomicInteger或LongAdder等方法来实现。 i可以分为三步 我们通过实验来观察实现i操作的方式。 下面实验中通过继承Thread实现了多线程 错误方法&#xff1a;…

网上工伤做实网站做网站都要掌握什么

文章目录 分布式IDUUIDSnowflake算法数据库自增IDLeaf算法Redis自增ID 分布式ID 在我们业务数据量不大的时候&#xff0c;单库单表完全可以支撑现有业务&#xff0c;数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长&#xff0c;主从同步也扛不住了&#x…

规范12388举报网站建设管理2022年列入传销组织最新骗法

http://www.samsung.com/global/business/semiconductor/mobilesocProductDown.do?userIdtechinfinicores.com转载于:https://www.cnblogs.com/zd_ad/archive/2010/11/16/1878238.html

newDay06

1.今天课程和事比较多,背背单词,随便看了看 2.明天估计也没啥时间,上午两节课,下午直接回家了 3.问题,没啥的

买卖股票当中的最佳时机

买卖股票当中的最佳时机题目 给定一个数组$ prices $,它的第 $i $个元素 \(prices[i]\) 表示一支给定股票第 $i $天的价格。 你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法…

Java 与智慧交通枢纽:机场与地铁的数字化管理

一、引言 交通枢纽是现代城市运行的核心节点,承担着人流与物流的高效组织与调度。尤其是 机场与地铁系统,每天需要处理数以万计甚至数十万计的乘客流量,同时保障安全与效率。传统交通枢纽在 运力调度、信息透明度、…

PWN手的成长之路-04-PicoCTF_2018_shellcode

先 nc 连接服务器,交互一下看看有什么效果。发现是让我们输入一个字符,之后程序再打印出来。file 查看文件。32位的 ELF 可执行文件。checksec 查看文件安全属性。没开任何保护。NX 保护未开启,表明栈内存可被注入并…

最高人民法院新劳动争议司法解释一 理解与适用

最高人民法院新劳动争议司法解释一 理解与适用 第十六条 劳动争议仲裁机构作出仲裁裁决后,当事人对裁决中的部分事项不服,依法提起诉讼的,劳动争议仲裁裁决不发生法律效力。 【条文主旨】 本条是关于当事人对仲裁裁…