日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

So easy Webservice 1.Socket建设web服务

發(fā)布時(shí)間:2023/12/1 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 So easy Webservice 1.Socket建设web服务 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

socket 是用來(lái)進(jìn)行網(wǎng)絡(luò)通訊的,簡(jiǎn)單來(lái)說(shuō),遠(yuǎn)程機(jī)器和本地機(jī)器各建一個(gè)socket,然后通過(guò)該socket進(jìn)行連接通訊

socket簡(jiǎn)單模型圖:

socket的原理圖:

?

代碼實(shí)現(xiàn):

1.創(chuàng)建socket服務(wù)端:用于處理客戶端發(fā)送的請(qǐng)求數(shù)據(jù)

新建socket_server項(xiàng)目,添加SocketServer.java,然后run main方法,服務(wù)端處于等待客戶端狀態(tài)。

public class SocketServer {/*** 服務(wù)器端口*/private static int port = 9999;public static void main(String[] args) {try {//1.創(chuàng)建ServerSocket對(duì)象,用于讓客戶端連接ServerSocket serverSocket = new ServerSocket(port);//2.線程等待,直到收到客戶端請(qǐng)求,進(jìn)行處理while(true){System.out.println("等待客戶端請(qǐng)求---");Socket socket = serverSocket.accept();//收到客戶端請(qǐng)求//3.獲取輸入流對(duì)象InputStream,用于獲取客戶端發(fā)送的數(shù)據(jù)InputStream in = socket.getInputStream();byte[] b = new byte[1024];in.read(b);String req = new String(b, 0, b.length);//從0-lengthSystem.out.println("獲取客戶端數(shù)據(jù)success,reqData = "+req);//4.獲取輸出流對(duì)象OutputStream,用于給客戶端返回?cái)?shù)據(jù)OutputStream out = socket.getOutputStream();//轉(zhuǎn)大寫(xiě)后,返回給客戶端 out.write(req.toUpperCase().getBytes());//5.結(jié)束通信,關(guān)閉socket,關(guān)閉流 in.close();out.close();socket.close();}} catch (UnknownHostException e) {System.out.println("---找不到服務(wù)器的端口---");e.printStackTrace();} catch (IOException e) {System.out.println("---通信錯(cuò)誤---");e.printStackTrace();}} }

2.創(chuàng)建客戶端

新建一個(gè)socket_client項(xiàng)目,添加SocketClient.java

public class SocketClient {/*** 服務(wù)器ip地址*/private static String host = "127.0.0.1";/*** 服務(wù)器端口*/private static int port = 9999;public static void main(String[] args) {try {//1.創(chuàng)建socket對(duì)象,用于向服務(wù)端發(fā)送請(qǐng)求Socket socket = new Socket(host, port);//2.獲取輸出流對(duì)象OutputStream,用于給服務(wù)端輸出數(shù)據(jù)OutputStream out = socket.getOutputStream();//輸入字符串System.out.println("請(qǐng)輸入字符串:");Scanner input = new Scanner(System.in);String reqStr = input.next();//輸出到服務(wù)器 out.write(reqStr.getBytes());//3.獲取輸入流對(duì)象InputStream,用于輸入服務(wù)端返回處理后的數(shù)據(jù)InputStream in = socket.getInputStream();//獲取服務(wù)端返回的數(shù)據(jù)byte[] b = new byte[1024];in.read(b);//將字節(jié)輸入到b中String respStr = new String(b, 0, b.length);System.out.println("服務(wù)端處理后的結(jié)果:"+respStr);//4.關(guān)閉socket,關(guān)閉流,結(jié)束通信 in.close();out.close();socket.close();} catch (UnknownHostException e) {System.out.println("---找不到服務(wù)器的端口---");e.printStackTrace();} catch (IOException e) {System.out.println("---通信錯(cuò)誤---");e.printStackTrace();}} }

3.啟動(dòng)客戶端:

客戶端 控制臺(tái):請(qǐng)輸入字符串:hello(輸入后回車)服務(wù)端處理后的結(jié)果:HELLo-------------------------------------------- 服務(wù)端 控制臺(tái):等待客戶端請(qǐng)求---獲取客戶端數(shù)據(jù)success,reqData = hello

?

測(cè)試:

1.通過(guò)C#客戶端來(lái)訪問(wèn)JavaSocket服務(wù)

?

2.通過(guò)IE來(lái)訪問(wèn)SocketService

accept success....... 從客戶端傳送來(lái)的數(shù)據(jù)如下: POST / HTTP/1.1 Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: 127.0.0.1:9999

?Content-Length:?10

Connection:?Keep-Alive

Cache-Control:?no-cache

word=hello

?

?

測(cè)試結(jié)果:

1.1: 不同的語(yǔ)言支持Socket通信嗎? 支持(經(jīng)測(cè)試,上面的socketserver端程序,使用c#,web瀏覽器也可以訪問(wèn))

1.2: 不同的協(xié)議支持Socket通信嗎? web程序可以調(diào)用socket請(qǐng)求,但是由于協(xié)議不同,因此在處理的時(shí)候要過(guò)濾http的協(xié)議格式,返回的時(shí)候還需要添加 http返回的格式

1.3: 如果參數(shù)多: 可維護(hù)性就比較低

1.4: Socket服務(wù)有利于推廣嗎? 不利

總結(jié):

* 服務(wù)端流程:
* 1.創(chuàng)建ServerSocket對(duì)象,用于讓客戶端連接
* 2.獲取socket對(duì)象,線程等待,直到收到客戶端請(qǐng)求
* 3.獲取輸入流對(duì)象InputStream,用于獲取客戶端發(fā)送的數(shù)據(jù)
* 4.獲取輸出流對(duì)象OutputStream,用于給客戶端返回?cái)?shù)據(jù)
* 5.結(jié)束通信,關(guān)閉socket,關(guān)閉流
*
* socket和webservice比較,缺點(diǎn):
* 1.Socket服務(wù)不利于推廣(如果讓別人知道你的Socket服務(wù))
* 2.Socket處于傳輸層, 有可能無(wú)法穿越防火墻
* 3.Socket本身處于傳輸層,要處理應(yīng)用層的服務(wù)要解析HTTP協(xié)議比較麻煩,但是現(xiàn)在我們的應(yīng)用都是基于web的, web中的數(shù)據(jù)傳輸就需要HTTP協(xié)議
* 4.即使定義了格式. 后面如果格式改變則客戶端格式都需要同步變化維護(hù)困難

?

/**
* 客戶端流程:
* 1.創(chuàng)建socket對(duì)象,用于向服務(wù)端發(fā)送請(qǐng)求
* 2.獲取輸出流對(duì)象OutputStream,用于給服務(wù)端輸出數(shù)據(jù)
* 3.獲取輸入流對(duì)象InputStream,用于接受服務(wù)端返回處理后的數(shù)據(jù)
* 4.結(jié)束通信,關(guān)閉socket,關(guān)閉流
* @author mlxs
*
*/

?

轉(zhuǎn)載于:https://www.cnblogs.com/yangzhenlong/p/5163293.html

總結(jié)

以上是生活随笔為你收集整理的So easy Webservice 1.Socket建设web服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。