網(wǎng)站沒(méi)有備案時(shí)怎樣推廣自己的app
目錄
1. Tomcat
1.1 Tomcat幫助啟動(dòng)http服務(wù)器。
1.2 tomcat理解:
2. 計(jì)算機(jī)網(wǎng)絡(luò)最基本的流程
?2.1 信息是怎么來(lái)的?
2.2 端口是干什么的?
3. 簡(jiǎn)單的Socket案例
服務(wù)端
客戶端
啟動(dòng):
3.2 在Tomcat發(fā)送信息,看能不能接收到
1. Tomcat
大公司的MVC框架都是自己設(shè)計(jì)搭建的。
Tomcat---本身只是一個(gè)web容器,這個(gè)容器能夠承載項(xiàng)目。
1.1 Tomcat幫助啟動(dòng)http服務(wù)器。
? ? ? ? 解釋:xxxDemo? 自己寫(xiě)好的項(xiàng)目,外部是無(wú)法通過(guò)http訪問(wèn)到這個(gè)寫(xiě)好的項(xiàng)目的,那么我們把它放進(jìn)tomcat中,然后啟用http,外部就能夠訪問(wèn)了。
????????http是網(wǎng)絡(luò)訪問(wèn)形式,
1.2 tomcat理解:
比如,
????????我們寫(xiě)一個(gè)a.html,在網(wǎng)頁(yè)上打開(kāi)顯示訪問(wèn)方式:
????我們想要http訪問(wèn),可以:
????????把它放進(jìn)tomcat中。
我們直接打開(kāi)tomcat
所有的項(xiàng)目都在 tomcat 下的webapps目錄下。
????????我們?cè)?tomcat 的 webapps 下直接新建一個(gè)文件夾(其實(shí)就是新建一個(gè)項(xiàng)目),起名叫 'myweb' ,? 把我們寫(xiě)的 a.html文件放進(jìn)這個(gè)文件夾中,啟動(dòng)tomcat。
????????.bat文件是Windows的啟動(dòng)。
啟動(dòng)之后再訪問(wèn)a.html,此時(shí)的訪問(wèn)是http的訪問(wèn)形式。
總結(jié):
????????tomcat:是服務(wù)器---->能讓其中配置的項(xiàng)目接受http請(qǐng)求。
2. 計(jì)算機(jī)網(wǎng)絡(luò)最基本的流程
1> 操作系統(tǒng)做網(wǎng)絡(luò)的問(wèn)答。
2> 應(yīng)用程序在操作系統(tǒng)之上。
3> 應(yīng)用程序通過(guò)Socket與操作系統(tǒng)通訊。
4> 操作系統(tǒng)之下是物理硬件--網(wǎng)卡。
網(wǎng)卡通過(guò)導(dǎo)線相連(即網(wǎng)線),兩個(gè)網(wǎng)卡通過(guò)大型的計(jì)算機(jī)網(wǎng)絡(luò)相連。
? ? ? ? 網(wǎng)卡就是?接收?和?發(fā)送?0101這樣信號(hào)的。
這就是計(jì)算機(jī)網(wǎng)絡(luò)最基本的流程。
總結(jié):
????????Socket就是兩個(gè)軟件之間的通訊保證。?
?2.1 信息是怎么來(lái)的?
????????Tomcat本身就是一個(gè)應(yīng)用軟件,如果我們現(xiàn)在去掉操作系統(tǒng)。
? ? ? ? 如果一個(gè)信息發(fā)送過(guò)來(lái),肯定是先打到網(wǎng)卡,然后通過(guò)Socket,最后把 當(dāng)前信息 給到 應(yīng)用程序Tomcat中。
2.2 端口是干什么的?
????????網(wǎng)卡上設(shè)置有端口。
網(wǎng)卡:什么樣的信息都可以發(fā)送到網(wǎng)卡。
????????操作系統(tǒng)之上運(yùn)行有各種各樣的軟件(WX,QQ,Tomcat...),那么,怎么把當(dāng)前信息準(zhǔn)確地發(fā)到對(duì)應(yīng)的軟件?
? ? ? ????????????????? 答:通過(guò)端口。?
比如:
????????與微信上的女朋友說(shuō):I love you.
????????與QQ上的女朋友說(shuō)“今晚一起吃飯?!?/p>
???如何發(fā)送到對(duì)應(yīng)的軟件?
? ? ? ? 要想被識(shí)別,信息必須帶上端口號(hào),才能對(duì)應(yīng)上。
3. 簡(jiǎn)單的Socket案例
? ? ? ? ?打開(kāi)IDEA,新建項(xiàng)目,選擇java項(xiàng)目,SDK默認(rèn)即可,其余都不選,下一步取個(gè)名字 ’javaDemo‘。
過(guò)程:
? ? ? ? ?首先,新建一個(gè)客戶端,起名’SocketClient‘
客戶端是發(fā)送信息的。可以理解為瀏覽器。?
????????再新建一個(gè)類,’SocketServer‘
服務(wù)器端,類比于tomcat,接收信息。
服務(wù)端
在服務(wù)端:
????????寫(xiě)個(gè)run()方法
1.創(chuàng)建Socket:
????????監(jiān)聽(tīng)4747端口(我們所能監(jiān)聽(tīng)的端口,0--65535,因?yàn)槎丝谥挥羞@些)
public static void run() throws IOException {ServerSocket serverSocket=new ServerSocket(4747);//端口的范圍:0--65535}
2. 寫(xiě)一個(gè)循環(huán)等待客戶的連接
while(true){}
????????while(true)本身是一個(gè)死循環(huán),為了不讓程序卡死,我們調(diào)用一個(gè) serverSocket.accept() 方法,阻塞監(jiān)聽(tīng):只有監(jiān)聽(tīng)到客戶端的信息后才會(huì)向下執(zhí)行。
Socket socket = serverSocket.accept();//阻塞監(jiān)聽(tīng),只有監(jiān)聽(tīng)到客戶端的信息后才會(huì)向下執(zhí)行
3.下一步輸出客戶端給我們發(fā)來(lái)的程序。
????????socket.getInputStream() 打開(kāi)當(dāng)前的輸入流,接收輸入的信息。
InputStream inputStream = socket.getInputStream();//打開(kāi)輸入流:接收輸入的信息
? ? ? ? 輸入的字節(jié)流信息按字節(jié)流讀取:read()阻塞
從Socket上讀取對(duì)端發(fā)過(guò)來(lái)的數(shù)據(jù)一般有兩種方法:
1)按照字節(jié)流讀取BufferedInputStream in = new BufferedInputStream(socket.getInputStream()); int r = -1; List<Byte> l = new LinkedList<Byte>();while ((r = in.read()) != -1) {l.add(Byte.valueOf((byte) r));}
2)按照字符流讀取BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));?String s;while ((s = in.readLine()) != null) {System.out.println("Reveived: " + s);}
????????這兩個(gè)方法 read() 和 readLine() 都會(huì)讀取對(duì)端發(fā)送過(guò)來(lái)的數(shù)據(jù),如果無(wú)數(shù)據(jù)可讀,就會(huì)阻塞直到有數(shù)據(jù)可讀?;蛘叩竭_(dá)流的末尾,這個(gè)時(shí)候分別返回-1和null。
這個(gè)特性使得編程非常方便也很高效。
????????信息量是多少,輸入流就是0101這樣的數(shù)據(jù),最后把0101數(shù)據(jù)轉(zhuǎn)換成String類型的字符串?dāng)?shù)據(jù)。
int count=0;
while(count==0){count= inputStream.available();
}
byte[] bytes=new byte[count];//010101001
inputStream.read(bytes);
String context=new String(bytes);
System.out.println(context);
客戶端
1. 創(chuàng)建Socket
Socket socket=new Socket("127.0.0.1",4747);
??????????本地端口號(hào)是'127.0.0.1', 向 4747 端口號(hào)傳信息。
2.?打開(kāi)輸出流,建立Socket連接
????????getOutputStream方法得到的是一個(gè)輸出流,客戶端的Socket對(duì)象上的getOutputStream方法得到的輸出流其實(shí)就是發(fā)送給服務(wù)器端的數(shù)據(jù)。
OutputStream outputStream = socket.getOutputStream();
3. 打印輸出流
PrintStream printStream=new PrintStream(outputStream);
System.out.println("hello");
若想輸入自己想要的東西
Scanner scanner=new Scanner(System.in);
String context = scanner.nextLine();
printStream.println(context);
4. 關(guān)閉輸出流
????????close()方法用于關(guān)閉基礎(chǔ)輸出流。
啟動(dòng):
????????先啟動(dòng)服務(wù)器端,讓他處于隨時(shí)的監(jiān)聽(tīng)狀態(tài)。
? ? ? ? 再啟動(dòng)客戶端。
3.2 在Tomcat發(fā)送信息,看能不能接收到
????????首先,運(yùn)行服務(wù)器。
Tomcat:
4747端口發(fā)送aaaaaa.ssss
能夠接收到。
????????就是說(shuō),當(dāng)前服務(wù)端能直接接收瀏覽器傳輸?shù)男畔?/strong>的。