999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

全雙工多線程套接字通信的研究與實現

2017-06-22 13:44:54舒玉坤張國祥
關鍵詞:進程程序

舒玉坤,張國祥

(1.湖北師范大學 數學與統計學院,湖北 黃石 435002 ; 2.湖北師范大學 物理與電子科學學院,湖北 黃石 435002)

全雙工多線程套接字通信的研究與實現

舒玉坤1,張國祥2

(1.湖北師范大學 數學與統計學院,湖北 黃石 435002 ; 2.湖北師范大學 物理與電子科學學院,湖北 黃石 435002)

對網絡環境中分布式進程通信的特點分析,借助JAVA對多線程套接字通信的支持,在Android平臺下,使用JAVA語言編程實現了全雙工多線程套接字通信,該方法安全,快捷,方便,具有一定的實用性。

JAVA; 客戶端/服務器; 套接字;多線程;通信

1 網絡通信的特點

計算機網絡是分布在不同地理位置的多臺自治計算機系統的集合,這種自治表現為“獨立”,即每臺計算機的操作和資源,都由自身的操作系統來管理,用戶共享的網絡資源通過網絡環境中的分布式進程通信來實現;而單機系統中的通信則體現為程序在時間上嚴格按照次序執行(靜態),進程是一個程序對某個數據集的執行過程(動態),要保證通信的正常進行,必須對進程創建、撤銷和狀態轉換進行控制。可見網絡進程通信與單機進程通信的本質區別是網絡中的主機具有高度的自治性;不同的主機沒有一個統一的高層操作系統進行全局控制、調度與管理,因此網絡環境下分布式進程通訊需要解決進程命名與尋址方式,多重協議的識別,進程間的相互作用等問題。為此,在UNIX中引入五元組(或一個相關association)即協議、本地地址、本地端口號、遠程地址、遠程端口號來完整標識一個進程。

2 客戶端/服務器(C/S)

在TCP/IP中,進程間相互作用采用客戶端/服務器模式,即用client/server分別表示相互通信的兩個應用程序的進程,客戶向服務器發出服務請求,服務器響應客戶的請求,提供客戶所需要的服務,由于網絡資源分布的不均勻性以及進程通信的異步性,有必要建立一個機制,為進程之間建立連接,在進程交換數據的過程中維護連接,為數據交換提供同步控制與協調。

3 套接字(Socket)

使用TCP/IP協議的應用程序,一般用UNIX BSD的套接字(Socket)來實現網絡進程之間的通信,按照UNIX思想就是“一切皆文件”,都可以用“打開”、“讀/寫”、“關閉”等模式來操作,Socket就是該模式的一個具體實現,是一種特殊的文件,通過socket()、bind()、listen()、connect()、accept()、read()、write()、close()函數來實現。

在網絡中應用層可以利用Socket對應的函數建立進程的連接,實現數據交換,因為Socket本身是面向client/server模式設計的,針對客戶和服務器的不同程序提供了不同Socket系統調用,客戶機可隨機申請一個Socket,服務器使用熟知的Socket,客戶可以隨機向服務器發出請求,服務器提供相應的服務。

4 多線程套接字通信的原理

4.1 JAVA對多線程通信的支持

JAVA是常用的網絡編程語言之一,它本身提供了Thread類,封裝了有關線程的控制,負責線程的啟動運行、休眠、掛起、恢復、退出和終止,以及線程優先級的控制,同時使用管程機制(monitor)來控制JAVA多線程的同步,提供3個標準Object類方法wait()、notify()和notifyAll()來實現線程之間的控制轉移,以防止在一個線程已得到了資源,而其它線程無休止的“忙等待”,消耗CPU資源,以解決“死鎖”的問題。 為保證客戶和服務器的正常連接,Socket通過三次握手來實現連接,如圖1所示:

圖1 Socket三次握手

從圖1中可知,當客戶端調用connect()時,觸發了連接請求,向服務區發出SYN J包,使connect進入阻塞狀態,服務器監聽到連接請求后,調用Accept()接收請求,并向客戶發送SYN K,ACK J+1,這時Accept進入阻塞狀態,客戶收到服務器SYN K,ACK j+1后,并對SYN K進行確認,服務器收到ACK k+1時,Accept(返回)三次握手完成,連接建立成功。

4.2 多線程套接通信的實現

一個進程是一個獨立的運行環境,可以看作一個程序或者一個應用,而線程是在進程中執行的一個任務,Java運行環境是一個包含了不同的類和程序的單一進程。線程可以被稱為輕量級進程,線程需要較少的資源來創建和駐留在進程中,并且可以共享進程中的資源。在多線程程序中,多個線程被并發的執行以提高程序的效率,CPU不會因為某個線程需要等待資源而進入空閑狀態。多個線程共享堆內存,因此創建多個線程去執行一些任務會比創建多個進程更好。

JAVA有兩種創建線程的方法:一是實現Runnable接口,然后將它傳遞給Thread的構造函數,創建一個Thread對象;二是直接繼承Thread類,并調用了Thread的run()方法,本文采用第二種方法,在客戶端程序中,首先通過mReceiveThread = new ReceiveThread(clientSocket),然后,為了在新的線程中執行,需要使用mReceiveThread.start()開啟線程;在服務器程序中,首先通過mAcceptThread = new AcceptThread(),然后使用mAcceptThread.start()開啟線程。在Java中新建一個線程時,它的狀態是New,當調用線程的start()方法時,狀態被改變為Runnable,線程調度器會為Runnable線程池中的線程分配CPU時間并且將它的狀態置為Running。當然也可以使用Thread類的Sleep()方法讓線程暫停一段時間,但不會讓線程終止,一旦從休眠中喚醒線程,線程的狀態將會被改變為Runnable,并且根據線程調度,它將得到執行。如圖2所示:

圖2 客戶連接請求與服務器監聽請求及信息收發

線程調度是一個操作系統服務,它負責為Runnable狀態的線程分配CPU時間,一旦創建一個線程并啟動它,它的執行便依賴于線程調度器的實現,CPU分配給可用的Runnable線程時間片,分配CPU時間可以基于線程優先級或者線程等待的時間,線程調度并不受Java虛擬機控制。

在程序實現中需要注意的是,在安卓系統2.3的系統上通信正常,但在4.0以上系統需要附加以下代碼,否則出錯。

StrictMode.setThreadPolicy(new StrictMode

.ThreadPolicy.Builder()

.detectDiskReads()

.detectDiskWrites()

.detectNetwork()

.penaltyLog()

.build());

StrictMode.setVmPolicy(new StrictMode

.VmPolicy

.Builder()

.detectLeakedSqlLiteObjects()

.detectLeakedSqlLiteObjects()

.penaltyLog()

.penaltyDeath()

.build());

同時還要在AndroidManifest.xml中開放以下權限:

android.permission.INTERNET

android.permission.ACCESS_NETWORK_STATE

android.permission.ACCESS_WIFI_STATE

android.permission.CHANGE_WIFI_STATE

程序實現客戶與服務器收發信息界面如圖3所示:界面為中文繁體,可轉換為中文簡體,在通信的過程中,為防止信息出現亂碼,可通過new String(this.information, "編碼方式").trim()進行編碼轉換,以保證通信的雙方編碼一致。

圖3 客戶與服務器收發信息界面

[1]吳功宜. 計算機網絡高級教程[M]. 北京:清華大學出版社,2007.

[2]Richard Stevens W. UNIX網絡編程(第2版) [M].北京:清華大學出版社,1999.

[3]Andrew S, Tanenbaum. Computer Networks (Third Edition) [M].北京:清華大學出版社,1998.

[4]Sayed Y, Hashimi, Satya Komatineni. 精通Android2[M]. 北京:人民郵電出版社,2010.

[5]吳亞峰,蘇亞光.Android應用案例開發大全[M].北京:人民郵電出版社,2011.

[6]張 斌,高 波. Linux網絡編程 [M].北京:清華大學出版社,2000.

[7]陳 浩.JAVA編程入門與提高 [M].北京:機械工業出版社,2011.

Research and implementation of full duplex multi-threadedsocket communication

SHU Yu-kun1,ZHANG Guo-xiang2

(1.College of Mathematics and Statistics,Hubei Normal University,Huangshi 435002,China;2. College of Physics and Electronics Science,Hubei Normal University,Huangshi 435002,China;)

Based on the characteristics of distributed interposes communication in network environment, With the help of JAVA support for multithreaded socket communication, using JAVA programming to realize full duplex multithread socket communication in the Android platform, the method is safe, quick, convenient and has a certain practicality.

JAVA; client / server; socket; multi thread; communication

2016—02—25

舒玉坤(1984— ),女,湖南溆浦人,助理實驗師、碩士,主要研究方向為微電子與信息技術.

TP393

A

2096-3149(2017)02- 0005-04

10.3969/j.issn.2096-3149.2017.02.002

猜你喜歡
進程程序
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
我國高等教育改革進程與反思
教育與職業(2014年7期)2014-01-21 02:35:04
Linux僵死進程的產生與避免
男女平等進程中出現的新矛盾和新問題
主站蜘蛛池模板: 91精品啪在线观看国产60岁 | 992tv国产人成在线观看| 无码中字出轨中文人妻中文中| 88av在线看| 成人国产免费| 伊人天堂网| 毛片网站在线播放| 亚洲日本在线免费观看| 国产99视频在线| 国产97公开成人免费视频| 亚洲第一色视频| 国产亚洲精| 国产精品福利在线观看无码卡| 国产欧美专区在线观看| AV在线麻免费观看网站| 色综合久久88| 免费观看男人免费桶女人视频| 日韩欧美国产另类| 99中文字幕亚洲一区二区| 99国产精品免费观看视频| 国产福利一区二区在线观看| 亚洲福利一区二区三区| 亚洲欧美在线精品一区二区| 54pao国产成人免费视频| 小蝌蚪亚洲精品国产| 精品久久香蕉国产线看观看gif | 91麻豆久久久| 国产综合在线观看视频| 精品综合久久久久久97超人| 国产极品嫩模在线观看91| 国产日本视频91| 国产精品久久久久久久久| 亚洲精品在线观看91| 精品国产91爱| 亚洲中文字幕国产av| 亚洲AV无码精品无码久久蜜桃| 亚洲午夜国产片在线观看| 亚洲无码高清一区| 国内精品小视频福利网址| 亚洲色图欧美激情| 欧美黄网在线| 国产高颜值露脸在线观看| 中文字幕永久在线看| аⅴ资源中文在线天堂| 99ri精品视频在线观看播放| 美女内射视频WWW网站午夜 | 欧美色综合网站| 秋霞国产在线| 久久青草精品一区二区三区| 999精品色在线观看| 国产91精品最新在线播放| 国产十八禁在线观看免费| 亚洲性日韩精品一区二区| 日韩欧美高清视频| 亚洲中字无码AV电影在线观看| 国产浮力第一页永久地址| 99热最新网址| 一级毛片视频免费| 自拍偷拍欧美| 人妻91无码色偷偷色噜噜噜| 好吊色妇女免费视频免费| 99国产精品国产高清一区二区| 欧美三级自拍| 国产精品私拍99pans大尺度 | www.狠狠| 国产精品视频白浆免费视频| аv天堂最新中文在线| 国产成人精品在线| aaa国产一级毛片| 美女无遮挡被啪啪到高潮免费| 1769国产精品视频免费观看| 91久久国产热精品免费| 色悠久久综合| 亚洲中文字幕久久精品无码一区| 亚洲成人www| 视频一区视频二区日韩专区| 日韩国产综合精选| 九九热这里只有国产精品| 国产在线高清一级毛片| 日本成人精品视频| 国产成人亚洲无吗淙合青草| 久久久精品久久久久三级|