Socket連線程式碼示例、WebService 小demo示例
最近面試遇到的問題
- 1:開閉原則
開放對原來程式碼的擴充套件,封閉對原來程式碼的修改
- 2:http協議
A : URL是http(超文字傳輸協議)是基於請求與響應模式的、無狀態的、應用層協議。長基於TCP的連線方式
B : HTTP請求,http請求分別包括(請求行、訊息報頭、請求正文)
請求行:Method Request-URI HTTP-Version CRLF
Method請求方式包括(GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS)
C : HTTP響應,http響應分別包括(狀態行、訊息報頭、返回正文)
狀態行:HTTP-Version Status-Code Reason-Phrase CRLF
詳細見:
3:https協議
什麼是HTTPS
HTTPS(Secure Hypertext Transfer Protocol)安全超文字傳輸協議 它是一個安全通訊通道,它基於HTTP開發,用於在客戶計算機和伺服器之間交換資訊。它使用安全套接字層(SSL)進行資訊交換,簡單來說它是HTTP的安全版。它是由Netscape開發並內置於其瀏覽器中,用於對資料進行壓縮和解壓操作,並返回網路上傳送回的結果。HTTPS實際上應用了Netscape的安 全全套接字層(SSL)作為HTTP應用層的子層。(HTTPS使用埠443,而不是象HTTP那樣使用埠80來和TCP/IP進行通訊。)SSL使 用40 位關鍵字作為RC4流加密演算法,這對於商業資訊的加密是合適的。HTTPS和SSL支援使用X.509數字認證,如果需要的話使用者可以確認傳送者是誰。HTTP和HTTPS的區別
http協議和https有著很大的區別。總的來說,http效率更高,https安全性更高。
https協議需要到ca申請證書,一般免費證書很少,需要交費。 http是超文字傳輸協議,資訊是明文傳輸,https 則是具有安全性的ssl加密傳輸協議 http和https使用的是完全不同的連線方式用的埠也不一樣,前者是80,後者是443。
http的連線很簡單,是無狀態的 HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議 要比http協議安全
- 4:Socket連線程式碼示例
Socket程式設計概念有兩個:1、ServerSocket(服務端);2、Socket(客戶端)。服務端與客戶端之間通過Socket來建立連線,並通訊
1):服務端程式碼:
package cn.com.demo5;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server5 {
public static void main(String args[]) throws IOException {
// 為了簡單起見,所有的異常資訊都往外拋
int port = 8899;
// 定義一個ServerSocket監聽在埠8899上
ServerSocket server = new ServerSocket(port);
while (true) {
//server嘗試接收其他Socket的連線請求,server的accept方法是阻塞式的
//伺服器啟動後,或完成一個連線後,會再次在此等候下一個連線
Socket socket = server.accept();
// 每接收到一個Socket就建立一個新的執行緒來處理它
new Thread(new Server5Task(socket)).start();
}
}
}
2):建立ServerTask類:
package cn.com.demo5;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
/**
* 用來處理Socket請求的
*/
public class Server5Task implements Runnable {
private Socket socket;
//建構函式
public Server5Task(Socket socket) {
this.socket = socket;
}
//實現Runnable 介面應該由那些打算通過某一執行緒執行其例項的類來實現。類必須定義一個稱為 run 的無引數方法。
public void run() {
try {
//呼叫與客戶端實現的方法
handleSocket();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 跟客戶端Socket進行通訊
*
* @throws Exception
*/
private void handleSocket() {
BufferedReader br = null;
Writer writer = null;
try {
//接收客戶端傳遞過來的引數,設定接收的編碼格式為:GBK
br = new BufferedReader(new InputStreamReader(
socket.getInputStream(), "GBK"));
StringBuilder sb = new StringBuilder();
String temp;
int index;
while ((temp = br.readLine()) != null) {
System.out.println(temp);
// 遇到 eof 時就結束接收
if ((index = temp.indexOf("eof")) != -1) {
sb.append(temp.substring(0, index));
break;
}
sb.append(temp);
}
System.out.println("客戶端: " + sb);
// 服務端下發給客戶端的引數,設定傳遞引數的編碼格式為:UTF-8
writer = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
writer.write("你好,客戶端。");
/**
* BufferedReader的readLine方法是一次讀一行的,這個方法是阻塞的,
* 直到它讀到了一行資料為止程式才會繼續往下執行,那麼readLine什麼時候才會讀到一行呢?
* 直到程式遇到了換行符或者是對應流的結束符readLine方法才會認為讀到了一行,才會結束其阻塞,讓程式繼續往下執行。
* 所以我們在使用BufferedReader的readLine讀取資料的時候一定要記得在對應的輸出流裡面一定要寫入換行符
* (流結束之後會自動標記為結束,readLine可以識別),寫入換行符之後一定記得如果輸出流不是馬上關閉的情況下記得flush一下,
* 這樣資料才會真正的從緩衝區裡面寫入
*/
writer.write("eof\n");
//是當前執行緒休眠,單位為毫秒值。可測試客戶端程式碼裡面的超時設定
Thread.sleep(12 * 100);
writer.flush();//寫完後要記得flush
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
if (br != null) {
br.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
3):客戶端程式碼:
package cn.com.demo5;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.net.SocketTimeoutException;
public class Client5 {
public static void main(String args[]) {
Socket client = null;
Writer writer = null;
BufferedReader br = null;
String host = "127.0.0.1"; // 要連線的服務端IP地址
int port = 8899; // 要連線的服務端對應的監聽埠
try {
// 與服務端建立連線
client = new Socket(host, port);
// 建立連線後就可以往服務端寫資料了
// 客戶端傳送給服務端的引數,設定傳遞引數的編碼格式為:GBK
writer = new OutputStreamWriter(client.getOutputStream(), "GBK");
writer.write("你好服務端。");
writer.write("eof\n");//BufferedReader讀取,記得加換行
writer.flush();
// 寫完以後進行讀操作
br = new BufferedReader(new InputStreamReader(
client.getInputStream(), "UTF-8"));
// 設定超時間為10秒
client.setSoTimeout(10 * 1000);
StringBuffer sb = new StringBuffer();
String temp;
int index;
try {
while ((temp = br.readLine()) != null) {
if ((index = temp.indexOf("eof")) != -1) {
sb.append(temp.substring(0, index));
break;
}
sb.append(temp);
}
} catch (SocketTimeoutException e) {
System.out.println("資料讀取超時。");
}
System.out.println("服務端: " + sb);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if (writer != null) {
writer.close();
}
if (writer != null) {
br.close();
}
if (writer != null) {
client.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
4:WebService入門:
1)、WebService工作原理-SOAP
當客戶端呼叫一個WebService的方法時,首先將方法名稱和需要傳遞的引數包裝成XML,也就是SOAP包,通過HTTP協議傳遞到伺服器端,然後伺服器端解析這段XML,得到被呼叫的方法名稱和傳遞過來的引數,進而呼叫WebService相應的方法,方法執行完畢後,將返回結果再次包裝為XML,也就是SOAP響應,傳送到客戶端,最後客戶端解析這段XML,最終得到返回結果。2)、WebService 小demo示例:
A:建立WebService專案,如圖:
B:程式碼示例:
package cn.com.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Endpoint;
/**
* 申明 WebService 類
* @author Summer
*
*/
@WebService()
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Hello {
@WebMethod(operationName="test1")
public String sayHello(String userName) {
return "Hello,"+userName+"!";
}
@WebMethod(operationName="test2")
public String sayHello() {
return "Hello World!";
}
//執行該方法報錯時,在在前面加上 @SOAPBinding(style = SOAPBinding.Style.RPC)
public static void main(String[] args) {
//將WebService釋出到指定地址
Endpoint.publish("http://localhost:8080/WebServiceTest/Hello", new Hello());
System.out.println("Success");
//瀏覽器輸入地址:http://localhost:8080/WebServiceTest/Hello?wsdl
}
}
C : 在瀏覽器中輸入上述地址後,如圖:
下載完檔案後,解壓;進入cmd 輸入:
1.開啟 cmd
2.敲dos 命令: d: 回車
3.敲dos 命令: cd D:\WebServers\axis-1_4\lib 回車(具體包存放的位置)
4.敲dos 命令: java -classpath “.;commons-logging- 1.0.4.jar;axis.jar;commons-discovery-0.2.jar;jaxrpc.jar;wsdl4j-1.5.1.jar;saaj.jar;activation.jar;mail.jar” org.apache.axis.wsdl.WSDL2Java -o “abcdefg”
5.接著第4步:加上空格,再加上你的地址;如: http://localhost:8080/WebServiceTest/Hello?wsdl
6:生成的java檔案會存放在:D:\WebServers\axis-1_4\lib\abcdefg 目錄下。將檔案拷入你的工程裡面。並將裡面的jar包也拷到專案lib目錄下
7:建立 clientTset 類進行測試
package cn.com.client;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import cn.com.service.Hello;
import cn.com.service.HelloServiceLocator;
public class clientTest {
public static void main(String args[]) throws ServiceException, RemoteException {
HelloServiceLocator service = new HelloServiceLocator();
Hello helloProxy = service.getHelloPort();
String hello1 = helloProxy.test1("世界");
System.out.println(hello1);
String hello2 = helloProxy.test2();
System.out.println(hello2);
}
}
8:執行結果:Hello,世界 Hello World!(不知為何,我這邊響應很慢,等了好幾分鐘才出現結果。)
瀏覽器相容
- 目前,本編輯器對Chrome瀏覽器支援最為完整。建議大家使用較新版本的Chrome。
- IE9以下不支援
- IE9,10,11存在以下問題
- 不支援離線功能
- IE9不支援檔案匯入匯出
- IE10不支援拖拽檔案匯入
相關推薦
Socket連線程式碼示例、WebService 小demo示例
最近面試遇到的問題 1:開閉原則 開放對原來程式碼的擴充套件,封閉對原來程式碼的修改 2:http協議 A : URL是http(超文字傳輸協議)是基於請求與響應模式的、無狀態的、應用層協議。長基於TCP的連線方式 B : HTTP請求,ht
JDBC連線到Oracle資料庫的小demo
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.
socket心跳檢測和重連小demo
有時候我們的程式要求socket一直保持連線,並且希望在socket斷開以後能夠重新連線,這個時候就需要用到心跳機制,所謂心跳機制,最簡單的做法就是客戶端每隔一段時間向服務端傳送資料包,為了節約資源我們
dubbo開發環境搭建與tomcat集成、DEMO示例(最完整版本、帶管理控制臺、監控中心、zookeeper)
-s http服務 ppr context 正常 windows web容器 web.xml配置 web.xml 以windows為例,linux基本相同,開發環境一般linux,個人環境一般windows(如果不開額外vm的話)。 示例以dubbo官方自帶demo為例子
Vue-小demo、小效果 合集(更新中...)
lin auto isa hover json () add ole bce (騰訊課堂學習小demo:https://ke.qq.com/course/256052) 一、簡單的指令應用 ——打擊滅火器 圖片素材點擊騰訊課堂的鏈接獲取 html: 1 &
SQL Server入門(三) SQL Server 官方Microsoft GitHub儲存庫、示例、SQL Server論壇、SQL Server 更新、遠端連線
一、SQL Server 的官方Microsoft GitHub儲存庫 (給出資料庫的各種例項型別,包括了SQL Server, Azure SQL Database, and Azure SQL Data Warehouse的應用範例)Official Microsoft GitHub Rep
TCP連線、Socket連線、Http連線的區別、三次TCP握手過程
轉載自:https://blog.csdn.net/ituling/article/details/52541545?utm_source=blogxgwz0 首先一定要明白: HTTP協議:簡單物件訪問協議,對應於應用層,HTTP協議是基於TCP連線的 tcp協議: 對應於傳輸層
socket訪問的小demo
伺服器端 public class ServiceServer { public static void main(String[] args) throws Exception { &
angularJS入門小Demo【簡單測試js程式碼的方法】
1、首先建立一個資料夾 demo, 2、在其中建立一個文字文件,改名為 demo-1.html, 3、把html中要引入的 js 檔案拷貝到 demo目錄下, 4、然後用 Notepadd++ 編輯剛才建立的檔案 demo-1.html <html> <head>
Oracle + Mybatis實現批量插入、更新和刪除示例程式碼
前言 Mybatis是web工程開發中非常常用的資料持久化的框架,通過該框架,我們非常容易的進行資料庫的增刪改查。資料庫連線進行事務提交的時候,需要耗費的資源比較多,如果需要插入更新的資料比較多,而且每次事務只提交一條資料,會造成非常大的資料庫資源浪費,導致資料庫效能、系統性能大幅度下降。
最大堆、最小堆定義及其C++程式碼實現
資料:https://blog.csdn.net/guoweimelon/article/details/50904346 但是它的最大堆刪除部分的程式碼有問題,詳見連結裡的評論區 定義 堆首先必須是一棵完全二叉樹 最大堆:完全二叉樹,父節點的值不小於子節點的值 最小堆:完全二叉樹,父節
python 學習筆記_2 模擬socket程式設計 服務端、客戶端通訊(參考核心程式設計2程式碼實現)
伺服器端程式碼實現: #!/usr/bin/env python#coding=gbk'''接收客戶端字串,在欄位串前面打上當前時間,然後返回server端採用 python2 linux下除錯執行客戶端採用python3 windows下除錯執行(注意編碼格式)''' from socket impor
三秒+一個小Demo,輕鬆掌握Hive中的 列轉行、行轉列!!!
閒話少敘,直接開幹! 先看Demo: 一、行轉列 首先,我們需要收集資料,建立一個檔案,內容如下: 一、啟動Hive,建立表並匯入資料: 1.1 建立表 create table test(name string,xingzuo string,xuexing string)
Java - JDK8新特性,程式碼demo示例;
哈哈哈哈大魔都下雪啦,敲段程式碼暖和暖和,嘿嘿 public class jdk8Test { @Test public void LambdaNew() { //before jdk8 List<String> names = Arrays.asList
python基礎之小資料池、程式碼塊、編碼
一、程式碼塊。if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 雖然上面的縮排的內容都叫程式碼塊,但是他不是pyt
簡單理解委託、事件以及小Demo
對於委託和事件的理解只是停留在表層,來記錄下學習過程 委託(Delegate) 是存有對某個方法的引用的一種引用型別變數。引用可在執行時被改變。 事件(Event) 基本上說是一個使用者操作,如按鍵、點選、滑鼠移動等等,或者是一些出現,如系統生成的通知。應用程式需要在事件
jquery中H5頁面長按事件(程式碼全)簡單小demo
一個簡單的demo,先上圖看效果(當長按0.5秒的時候就會顯示下面的紅色div) 如果是單擊一次滑鼠並沒有到0.5秒則提示 下面上全部程式碼 注意:是H5頁面才會觸發,用谷歌除錯的時候要按F12進入手機的模式,否則不起作用(@炬) <!DOCTYPE h
C# 建立、部署和呼叫WebService的簡單示例
webservice 可以用於分散式應用程式之間的互動,和不同程式之間的互動。 概念性的東西就不說太多,下面開始建立一個簡單的webservice的例子。這裡我用的是Visual Studio 2015開發工具。 首先建立一個空的Web應用程式。 然後滑鼠右
Markdown小技巧:程式碼格式、縮排和字型大小
程式碼格式 可以用<pre name="code" class="java"></pre>包裹住程式碼塊,例如: <pre name="code" class="java">這是一個Java程式碼</pre>
Java 呼叫阿里雲小蜜示例程式碼
Java呼叫示例程式碼: package com.xs.aliet.beebot; import java.util.Date; import java.util.HashMap; imp