1. 程式人生 > >使用Socket實現遠端通訊

使用Socket實現遠端通訊

講解這篇部落格的目的是為了引出WebService,不過Socket是比較接近底層的東西,可能有的時候比較難理解,但是作為一個java開發攻城獅也是需要我們瞭解的。下面講解使用socket模擬一個查詢天氣預報的小程式,比較的簡單

1、Socket基本概念

     Socket又稱"套接字",應用程式通常通過"套接字"向網路發出請求或者應答網路請求, Socket本質是程式設計介面(API),是對TCP/IP的封裝,TCP/IP也要提供可供程式設計師做網路開發所用的介面,這就是Socket程式設計介面;HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力(如果說TCP/IP協議不懂可以去查一下)。

2、建立服務端,因為我們需要提供一個可持續提供服務的,所以需要選擇多執行緒的。

public class WeatherServer {
	
	public static void main(String[] args) throws Exception {
		// 第一步:建立一個java工程
		// 第二步:建立一個ServerSocket物件,繫結一個埠
		// 埠要大於1024
		ServerSocket serverSocket = new ServerSocket(12333);
		while (true) {
			// 第三步:等待客戶端建立連線
			// 阻塞的方法
			final Socket socket = serverSocket.accept();
			Runnable runnable = new Runnable() {
				@Override
				public void run() {
					try {
						// 第四步:使用輸入流接收客戶端傳送的請求。
						DataInputStream dataInputStream = new DataInputStream(
								socket.getInputStream());
						String cityName = dataInputStream.readUTF();
						System.out.println("接收到客戶端傳送的請求:" + cityName);
						// 第五步:根據城市名稱查詢天氣。
						// 查詢。。。。。。
						Thread.sleep(1000);
						String result = "今天天氣很冷";
						System.out.println("返回天氣資訊:" + result);
						// 第六步:返回查詢結果,使用輸出流。
						DataOutputStream dataOutputStream = new DataOutputStream(
								socket.getOutputStream());
						dataOutputStream.writeUTF(result);
						// 第七步:關閉輸入輸出流。
						dataInputStream.close();
						dataOutputStream.close();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			};
			//啟動執行緒
			new Thread(runnable).start();
		}
	}
}

3、建立客戶端呼叫服務端

public class WeatherClient {
	public static void main(String[] args) throws Exception {	
		while(true) {
			// 第一步:建立一java工程
			// 第二步:建立一個socket物件。和服務端建立連線
			Socket socket = new Socket("127.0.0.1", 12333);
			// 第三步:傳送城市名稱查詢天氣。輸出流
			DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
			dataOutputStream.writeUTF("北京|上海|深圳");
			System.out.println("請求查詢天氣:" + "北京");
			// 第四步:接收返回結果,使用輸入流。
			DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
			String result = dataInputStream.readUTF();
			// 第五步:列印返回結果
			System.out.println("北京的天氣:" + result);
			// 第六步:關閉輸入輸出流。
			dataInputStream.close();
			dataOutputStream.close();
		}
	}
}

4、用debug啟動服務端

5、編寫呼叫服務端的指令碼(把txt字尾名改成bat,執行即可)


6、多啟動幾個指令碼


7、檢視結果



   小結:這是一個簡單的socket呼叫遠端服務,但是裡面涉及到了多執行緒的知識點,這個是每個程式設計師都必備的知識點,多執行緒還是要熟練使用的,其中socket其中涉及了tcp/ip的知識點。這個我們也得了解。下篇部落格介紹WebService。

相關推薦

使用Socket實現遠端通訊

講解這篇部落格的目的是為了引出WebService,不過Socket是比較接近底層的東西,可能有的時候比較難理解,但是作為一個java開發攻城獅也是需要我們瞭解的。下面講解使用socket模擬一個查詢

python基於併發與socket實現遠端檔案傳輸程式

FTP程式 Client: * bin/start.py 程式入口 * conf/配置檔案存放 * core/ * auth.py 登陸,註冊以及上傳下載檢視當前資料夾下檔案以及刪除功能存放 * cline.py 與服務端通訊 * home 本地使用者目錄 Server: * bin/

如何使處於不同區域網的計算機實現遠端通訊

我們知道處於同一區域網的兩臺計算機,進行通訊的方式很簡單,可以直接通過區域網內的私有ip定位計算機。但是如果要訪問外網即非本區域網的計算機就相對而言比較複雜。 下邊為了更好的理解這個過程,我從幾個問題說起: 1.要訪問一臺遠端非區域網的計算機,哪些是必須知道的?      

socket實現TCP通訊

TCP是一種可靠的,面向連線的協議。 在socket中,建立TCP連線的過程大致如下: 伺服器端: 1.初始化套接字 2.建立伺服器socket 3.將本機地址與伺服器socket繫結在一起 4.伺服器開始監聽 5.伺服器確認請求(確認之前時一種阻塞的狀態),accept(

C# 通過socket實現UDP 通訊

UDP不屬於面向連線的通訊,在選擇使用協議的時候,選擇UDP必須要謹慎。在網路質量令人十分不滿意的環境下,UDP協議資料包丟失會比較嚴重。但是由於UDP的特性:它不屬於連線型協議,因而具有資源消耗小,處理速度快的優點,所以通常音訊、視訊和普通資料在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個資料包,也不

socket實現TCP通訊_TCP連線android與微控制器(2016_03_21)

最近做了一個TCP連線android與微控制器的專案。記錄一下。 TCP連線物件 首先是TCP連線,以前沒有做過,摘抄的同事專案中TCP連線物件。 public class TCPChannel {     private SocketChannel myChannel =

[ PyQt入門教程 ] PyQt+socket實現遠端操作伺服器

  來需求了。。幹活啦。。 需求內容   部分時候由於快取重新整理、驗證碼顯示不出來或者瀏覽器打不開或者開啟速度很慢等原因,導致部分測試同事不想使用瀏覽器登入伺服器執行命令。期望有小工具可以替代登入瀏覽器的操作,直接傳送指令到伺服器執行並將執行結果返回。 需求設計   1、開發介

java代碼實現socket接口通訊(堵塞I/O)

write ice 代碼 args fin true finall tar 輸出 傳統的java實現socket通訊比較簡單實現,不過它屬於堵塞式的I/O流存取,只能由一個線程完成當前任務才能起下個一個線程,無法解決高並發; 1、簡單的socketservice

socket實現Linux和Windows之間的通訊

在日常生活中,絕大部分人使用的機器一般是windows系統,但是對於研發人員,開發、編譯等工作往往是建立在linux機器上。事實上,在伺服器方面,Linux、UNIX和WindowsServer佔據了市場的大部分份額;在超級計算機方面,Linux

TCP和UDP並實現socket的簡單通訊

http://www.cnblogs.com/IPrograming/archive/2012/10/15/CSharp_Socket_4.html http://www.cnblogs.com/dolphinX/p/3460545.html 一、TCP和UDP的區別和聯絡 1.五層協議

Untiy中用C#實現TCP通訊Socket通訊)服務端與客戶端皆可

簡而言之,TCP通訊原理大家可以從各種網路文獻上找到,這裡不做贅述。 只提出C#實現TCP通訊的一般方法和常用程式碼工具供第一次接觸TCP通訊的玩家參考,老玩家繞道。。。 為了方便大家理解我的程式碼,會適當提及通訊遠離。 1、建立服務端,TCP連線的基本: using U

nodejs socket實現的服務端和客戶端簡單通訊

                        本文例項講述了通

android進階3step2:Android App通訊——AIDL實現遠端服務的通訊

安卓介面描述語言AIDL 全稱:Android Interface definition language  作用:程序間的通訊介面(實現兩個程序資料共享) IBinder僅限於同一個程序間的資料共享 定義轉:https://www.jianshu.com

Java網路程式設計,socket實現一對一全雙工通訊聊天功能

本文使用socket的長連線,進行訊息的傳送和接受。 1、兩端 client 端,server端 2、兩執行緒 客戶端、伺服器端,各開兩個執行緒,實現讀寫,可以全雙工通訊,非同步傳送,非同步接受。 3、兩注意 程式等待輸入和一直處於等待訊息發來,所以,用到死迴圈。

簡單的通訊(二)----使用Socket實現TCP協議

客戶端向伺服器端傳送訊息,伺服器端給客戶端反饋訊息。程式碼和上一篇的程式碼差不多。 Client端程式碼 package com.demo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre

簡單的通訊(三)----使用Socket實現TCP協議

功能 客戶端向伺服器端傳送一張檔案(這裡以圖片為例),伺服器發反饋訊息給客戶端。 程式碼 package com.demo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im

LINUX下socket實現伺服器與多客戶端通訊(一)

一直對網路方面的技術比較感興趣,有時間就學習學習。雖然現在很多高階語言都已將網路程式設計部分做了封裝處理,使之使用更加方便,但是學習基礎原理,還是一個程式設計師必須要做的。 linux下的socket程式設計原理,網路上已經有大把的詳細說明,這裡不做說明,程式碼中已有簡單註釋。 具體方法,有

python3實現socket客戶端通訊demo

1.建立server.py檔案作為服務端,程式碼如下: #服務端 import socketserver client_list=[] class TCPHandler(socketserver.BaseRequestHandler): # 所有請求的互動都是在handle裡執行

Socket實現通訊,實時接收資料以及傳送資料

公司要做一個視訊採集socket通訊的專案,第三方服務端已經提供好了服務,讓我們對接,但是目前ui還沒有,所以就暫時先自己寫個小demo測試一下資料連線。 * 先看下佈局吧,很直觀。<?xml version="1.0" encoding="utf-8"?><

socket實現客戶端和客戶端之間通訊和聊天

1.實體類 package edu.tcu.cn; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Pr