SEO实战技术培训
一鸣叫兽SEO培训-国内知名企业SEO专家、专注SEO实战培训教学、全程一对一独立辅导。
文章27310 建站 浏览5218178

车上socket是什么意思怎么读(Linux Socket编程讲解必知必会)

原文标题:(车上socket是什么意思怎么读(Linux Socket编程讲解必知必会))

太神奇了,但是为什么以及如何实现呢?很久以前我就知道有一个套接字,但是我以前没有把这两个方面结合起来。今天,让我们看看为什么。 一些学生说他们不知道插座是什么。它非常抽象,只有在讨论计算机网络原理中的协议时才能看到。今天,我们完全忽略了过于严格的学术定义。让我们看看什么是套接字。想象一下,你把电脑的电源插入插座,你的电脑就可以用了,为什么?&ldquo。这不是胡说八道!&rdquo。事实上,让我们考虑一下这个过程。你把插头插到插座上,然后你的电脑和几千英里外的供电工厂就可以了。沟通。现在,把你的电脑想象成一个客户端,把几千英里外的一个供电工厂想象成一个服务器,你可以通过一个插座和一根又长又长的电缆连接起来。套接字相当于什么?&ldquo。插座!&rdquo。是的,是插座!就我的电脑而言,我希望它能用电工作。我只需要一个插座。什么样的插座是用什么样的电缆制成的,供电工厂在什么纬度和经度,电力是如何传输的,我关心什么,这与我无关!我只需要知道我需要的不是整个世界,而是。。。插座!在这里阅读,大概学生必须。插座。有非常敏感理解;让我们举另一个例子。你和同性恋朋友的电脑通过电线连接到同一个路由器。此时,您可以通过内部网的IP地址直接访问它。在这个过程中,正方形界面(RJ45界面)是& ldquo插座。无论如何,插入& ldquo插座。可以使用,我不在乎如何通过套接字实现通信。在计算机编程的网络世界中,作为一个应用程序,我只需要一个& ldquo插座。可以和任何服务器通信,想想都有点兴奋~ ~ ~

接下来要说的是电脑需要一个插座来插电源,所以电厂也需要一个插座来插电源给你& mdash& mdash换句话说,发电厂需要一个稳定的环境。插座。!。。。胡说,,,是的,它是。服务器也需要一个& ldquo插座。,但它被称为服务器套接字(看起来它是从套接字继承的,我还不知道)。

有& ldquo插座。在套接字的概念之后,我们可以愉快地让计算机(客户端)与发电厂(服务器)通信。客户机和服务器都需要套接字,因为我们今天的主题是& ldquo建立一个网络服务器。让我们看看如何为服务器创建服务器套接字。说到这里,有些学生会问,& ldquo客户不需要套接字吗?&rdquo。,确实需要,因为我们使用浏览器访问本地知识产权。127 . 0 . 0 . 1 & r quo。,所以客户端套接字由浏览器本身维护,不需要我们编写。&ldquo。但是我仍然不明白为什么在浏览器中输入127.0.0.1后我可以看到我的网页。要求解释。~那么,让我们慢慢来,先在服务器端写一个服务器套接字~

创建服务器端套接字的步骤如下:

1。创建服务器套接字对象

ServerSocket serverSocket = new ServerSocket(“80”); //这里只需要指明当前程序监听80号端口就可以了,至于为什么是80,因为我喜欢!“好霸道。。。”因为我们要监听web请求,默认就是80号端口。其实,1-1024端口被操作系统占用了,1025-65535的端口你随便用,只要不会和其他应用程序冲突就可以(别用什么类似3389这么常用的端口就好了。。。)

2作为服务器,我想知道我的任务是等待客户端发送请求,也就是说,客户端发送套接字,我必须先持有它!

Socket socket = serverSocket.accept(); //这里需要特别说明一下,accept方法比较特殊,它是一个阻塞方法(block method),因为只要它等不来客户端发来的请求(Socket),它就一直等下去而不会继续执行它下面的代码。唉,此等痴情人怎么跟我一样O(∩_∩)O

3。如果客户想向我表达并给我发一封情书,我只需要得到它作为服务器的输入。

InputStream inputStream = socket.getInputStream(); //注意,客户端发来的表白信息都在socket里面,而不是serverSocket里面,这点要是弄错了,读不到情书内容,活该你单身。(我只有冷笑。。。)

4。收到情书后,我很想知道里面写了什么!被迫的。不要。还有。留下来。好吧,让我们开始解析情书

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); //java包装类,只为读到写给我的情书,耶~ String line = “”; while ( (line = reader.readLine()) != null ){ System.out.println(line); }

5。对于汇编的前4个步骤的代码,需要try catch才能产生异常,正常捕获后代码将粘贴在下面。

public class MultiWebServer { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(80); System.out.println("正在等待情书中..."); Socket socket = serverSocket.accept(); System.out.println("收到情书,我要开始解析!"); InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line = ""; while ( (line = reader.readLine()) != null ){ System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } }

嗯,我们已经完成了服务器端代码的编写。下一步是什么?我不知道。。。然而,你还记得刚才提出的问题吗?& mdash&ldquo。但是我仍然不明白为什么在浏览器中输入127.0.0.1后我可以看到我的网页。&rdquo。然后尝试一下,看看如果我们在浏览器中输入127.0.0.1或localhost会发生什么。

我们必须首先运行刚刚编写的服务器端程序,然后打开浏览器。记住,我们必须先运行服务器端程序,否则情书会丢失。。。运行服务器端程序,如图所示:

Java搭建web服务器之Socket编程,更好的理解 Apache、Tomcat 注意红色圆圈中的两点:既然此时没有来自客户的情书,你还记得刚才接受()拦截的方法吗,它会一直等待,如果没有,我仍然会等待,所以红色圆圈会显示& ldquo等待情书& hellip&rdquo。;右边的箭头指的是什么,一个红色的停止图标,也就是说,程序一直在不停地运行,就像一个死循环(当然,这绝对不是一个死循环,它实际上是一个阻塞,它只是看起来像一个死循环,让我们以后再讨论一个死循环,别担心,它迟早会死的)

接下来,打开浏览器,在地址栏中输入127.0.0.1/index.html,然后输入查看浏览器的反应。。。。。过了一段时间,浏览器根本没有反应,然后告诉我页面无法显示。我去。。。我哭了,难道我们在所有这些谈话之后就失败了吗?然后打开eclipse,看看服务器端是否有任何移动。打开服务器看看,躺在水槽里,世界瞬间向我问好!

Java搭建web服务器之Socket编程,更好的理解 Apache、Tomcat 注意红色的笔痕。我收到了一封情书!我要开始解析了!情书的具体内容是什么?别问我,继续往下看。&ldquo。一个非常熟悉的信息,我们似乎在什么地方见过,记住,那是一个春天,你刚刚发芽。。。&rdquo。是的,这是计算机网络原理中的http请求消息。我还没有学会如何规划网络。没关系。看看前两行(事实上,我们以后只需要第一行)。&ldquo。我看到了index.html & rdquo是的,这是我们刚刚在浏览器中输入的地址。第二行,& ldquo我还看到了127 . 0 . 0 . 1 & rdquo;是的,我们刚刚在浏览器中输入了它。这是什么意思?兴奋之余,我不知道这到底意味着什么,但我想读者已经猜到了它的意思。

写在这里,作为一名服务员,我收到了客户的一封情书。为什么客户端(浏览器)根本没有响应?即使过了一会儿,& ldquo此页面无法显示& rdquo开始了。因为啊,人家给你写了一封情书,你没有回复人家,人家等了一会儿觉得绝望、难过!是的,不管你喜不喜欢,人们都会告诉他并给他一个答案,即使只是说:& ldquo抱歉,你是个好人。。。&rdquo。

你分心了吗?似乎在谈论你自己?回来,咱们现在的任务,是如何给人家一个答复。

如何给予,如何给予,如何给予。。。想得快,想得快,因为人们已经表明他们想要交谈。在127.0.0.1中。index.html&rdquo。快递当然必须由index.html给他答复。怎么回答,怎么回答,怎么回答。。。快点想。既然index.html是一个文件,我读出文件的内容并直接发送给客户难道还不够吗?但是用什么头发?是的,插座!我们使用套接字将文件内容返回给客户端。

然后问题出现了。。。&ldquo。那很好,关键是怎么做!&rdquo。& mdash& mdash我如何先阅读文件?

假设我们的index.html在我的计算机的电子://课件/计算机网络原理/实验/实验1/文件夹下,并且假设没有跨域访问,那么:

1。定义一个字符串来存储我们的工作目录

String base_url = "E://课件/计算机网络原理/实验/实验1/"; //这只是我本机的目录,至于到了你的电脑上,你可以自己更改</span>

2。我如何通过信息知道客户想向index.html坦白?看看情书的第一行,所以只要找到情书字符串的第一行并解析出index.html。放松,我们走

//由于目前只需要第一行,所以咱们就不像上面那样循环读取了,读一行就够了 String line = reader.readLine(); //用字符串截取函数,把“index.html”这个字符串给揪出来 String url = line.substring(5, line.indexOf("HTTP") - 1);

3。所以index.html的绝对路径是基础网址+网址。最后,我从人山人海中找到了我爱的人。让我们看看她是如何回答我的& mdash& mdash获取文件内容

inputStream = new FileInputStream(base_url + url); OutputStream outputStream = socket.getOutputStream(); //我要从服务器给客户端答复了,对于服务器来说,这是发出去的内容,所以是Out! byte[] buffer = new byte[4 * 1024]; //定义字节缓冲区 int len = 0; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); //很重要!通过socket的outputStream把咱们解析出来的文件内容一字不落的发出去 如果没写这个,导致你爱的跟你表白的抑郁而死,活该你单身 } outputStream.flush(); //如果最后一次write时没有把buffer写满,是不会自动发出去的,需要调用flush方法强制把内容从缓冲区发出去

好的,文件已经被读出并返回给客户端。亲爱的,他能收到吗?同样,请确保首先运行服务器端程序,然后打开浏览器并在输入前输入127.0.0.1/index.html。我很紧张,我很兴奋,我能收到回复吗?我会收到什么样的回复?如图所示。。。

Java搭建web服务器之Socket编程,更好的理解 Apache、Tomcat 为什么???!!!好吧,看看女神的index.html文件里写了什么。。。

<html> <head> <meta charset="utf-8" /> <title>Welcome</title> </head> <body> <h1>王欢,你是个好人... </h1> </body> </html>

看到这里我应该高兴还是难过?。。幸运的是,我的女神给了我一个答复。令我满意的是。。。然后问题出现了,哪一个是学习表达自己技能的最佳方式?

玩笑是个玩笑,那么我们关于这个话题的讨论结束了吗?可以说是的,但我承认我失败过一次。我必须第二次忏悔!(事实上,我的情况并非如此。我只能牺牲我的个性来获得更好的理解。哈哈)。好吧,我刚才的工作清单上有一个another.html。这次让我告诉她。好的。继续在浏览器中输入127 . 0 . 0 . 1/另一个. html并返回汽车。我希望这次我会宣布成功。然而,我等了又等。浏览器在那里盘旋。浏览器知道我太善变,拒绝给我送情书吗?好吧,我会再次打开浏览器,然后输入127.0.0.1/index.html,嗯?就连第一位女神都不理我?!妈的。为什么?

冲动是魔鬼!冷静点。我打开eclipse控制台,发现服务器没有& ldquo等待情书& hellip&rdquo。,所以我要求浏览器发送过去的情书,当然丢失了,因为没有人收到。(暗自高兴,幸好不是因为我太轻浮,所以浏览器没有给我发情书)但是为什么呢?

冷静下来,分析代码。事实上,我们可以想到,这段代码在一次执行后并没有完成,然后我第二次向她发送了一个请求,她当然不会收到它。是的,我们应该做什么来解决这个问题?跪下向媒人寻求建议!

媒人说:& ldquo给服务器程序一个死循环,让她反复等待客户的请求。&rdquo。(事实上,媒人一直处于死亡的循环中)

[媒人的确是媒人。。。),那就按照她说的去试一试吧!更改代码并在(真)循环时添加:

public class MultiWebServer { public static void main(String[] args) { String base_url = "E://课件/计算机网络原理/实验/实验1/"; while (true) { try { ServerSocket serverSocket = new ServerSocket(80); System.out.println("正在等待情书中..."); Socket socket = serverSocket.accept(); System.out.println("收到情书,我要开始解析!"); InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(inputStream)); String line = reader.readLine(); System.out.println(line); String url = line.substring(5, line.indexOf("HTTP") - 1); System.out.println("情书解析完毕,我要想想怎么回复了..."); // 获取文件内容 inputStream = new FileInputStream(base_url + url); OutputStream outputStream = socket.getOutputStream(); byte[] buffer = new byte[4 * 1024]; int len = 0; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } outputStream.flush(); System.out.println("情书请求已发送给客户端"); //关闭对应的资源 serverSocket.close(); socket.shutdownInput(); socket.close(); inputStream.close(); reader.close(); outputStream.close(); } catch (Exception e) { } } } }

就这样,媒人一直在这里等着。当客户来的时候,我会处理他的情书请求。处理完这个之后,我将以同样的方式继续循环,等等。、处理等。,处理。。。。

好吧,让我们接下来试试,或者确保先运行服务器端程序,然后告诉第一女神127.0.0.1/index.html仍然是一个好朋友,然后不要让我返回结果。。。这次打开eclipse控制台,你有没有发现右上角的红色暂停标志可以点击,这意味着我们的媒人还在努力工作!好吧,快点告诉第二个女神她说了什么。在浏览器中输入127 . 0 . 0 . 1/另一个. html,然后输入!多快,女神给了我一个答案。。。

Java搭建web服务器之Socket编程,更好的理解 Apache、Tomcat 这个。。。(她怎么知道不到十分钟?你是否突然认为cookie可以记录客户信息,但我们这里没有使用cookie)让我们看看another.html文件中写的是什么。

<html> <head> <meta charset="utf-8" /> <title>Welcome</title> </head> <body> <h1>我记得你刚和别人表白吧,还不过十分钟,你怎么会是个好人!</h1> </body> </html>

好吧,亲爱的朋友们,我什么都不会说。我必须向第三位女神忏悔吗?。。?浏览器自愿对我说:& ldquo告诉我,我可以给你寄和你这次一样多的自白信,因为她一直在等我把它们寄给她。&rdquo。想想吧,还是算了吧,生活就是这样,何必多说。。。

代码已经发布,看起来很简单,但实际操作中存在各种问题。

还有一些剩余材料要继续唠叨:

1、Q:什么是端口?

这是一个相对抽象的概念。对于进程间通信,每个进程只能占用一个端口,这意味着多个进程永远不能同时占用一个端口

2、Q:既然多个进程不能同时占用一个端口,那么咱们常说的web服务默认使用的是80端口,我电脑有三个浏览器,谷歌,360,IE他们却可以同时上网,这不是端口冲突了吗?

答:网络服务常用的端口80是指服务器监听网络请求的端口。是服务器,不是你自己的客户。一般来说,在应用程序打开后,访问网络的本地操作系统分配的端口号是随机的,所以虽然三个浏览器同时从网络服务器接收回复消息,但由于三个浏览器占用的端口不同,不会有冲突。

3、Q:既然我的应用程序使用的端口都是随机的,服务器接收到请求后怎么知道它要把应答报文发给谁?

答:在插座上!通过刚才的实际编程,在我的理解中,套接字肯定至少包括四个部分:IP地址、端口号、输入流和输出流。换句话说,从客户端发送到服务器的套接字必须有客户端的IP地址和相应应用程序的端口号,所以服务器自然知道谁应该发送回复消息。

4、Q:非要使用80端口吗?

答:不一定。刚才编程时我们确实使用了端口80,所以我们在浏览器中输入了127.0.0.1/index.html,浏览器将默认向127.0.0.1主机的端口80发送请求。然而,这个端口号80只是默认的,我们可以自己完全改变它。例如,在java代码中,服务器端的服务器套接字被更改为服务器套接字服务器套接字=新的服务器套接字(3456);此时,我们将在浏览器中输入127.0.0.1:3456/index.html。效果是一样的,所以我们可以尝一点。

5、Q:谁是客户端,谁是服务器?

答:我们只有一台计算机,它既是客户机又是服务器。当浏览器请求网页时,它就是客户端;当端口80接收到请求消息并做出响应时,它就是服务器。我真的不明白,想想什么是自恋,或者自拍也没关系。。

6、Q:还有什么问题,欢迎留言~

用java编写的对这个网络服务器的简单解释:这个代码非常简单,所以它绝对不是真正的网络服务器使用的代码。我们只能回答最基本的网络请求,不能检测跨域访问是否可能,等等。然而,最基本的套接字编程是肯定的。此外,对于此过程,只给出了一种处理iostream的方法。对于输入流(InputStream),除了我们刚刚使用的BufferedReader包装类之外,我们还可以直接使用输入流的read()方法,等等。对于输出流,除了我们刚刚使用的输出流的write()方法之外,还有BufferedWritter、PrintWritter等。也有。这些是java IO的基本用法。根据网络环境和要读取的文件大小,它们可以随时更改。这是意见问题。

在这篇文章的结尾,我不知道如何完成它。安静地做一名程序员是件好事。


原文标题:(车上socket是什么意思怎么读(Linux Socket编程讲解必知必会))

TAG:

最后编辑于: 2019-10-10 14:20:10作者:Admin_Long

一鸣叫兽-让你成为一个能熟练运用SEO核心技能的SEO技术人才!

  • 作者相关
  • 免费领取SEO教程,名额有限,先到先得!QQ:912037469
上一篇:什么一览众山小的前一句古诗(诗词欣赏:杜甫五律九首)
下一篇:seo优化主要任务包括哪些方面(seo网络优化的5大技巧)
评论(条)

验证码:
'); })();