前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇socket通信范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
關(guān)鍵詞:socket編程;Java;C#;Json;數(shù)據(jù)同步
1 引言
隨著Android智能手機(jī)市場的擴(kuò)大,基于Android系統(tǒng)的應(yīng)用程序也越來越多。Android程序多以Java語言為基礎(chǔ)進(jìn)行開發(fā),而在Windows平臺上,c#已經(jīng)成為開發(fā)桌面程序的主流平臺。在一些應(yīng)用場景中,需要Android設(shè)備與裝有Windows系統(tǒng)的計(jì)算機(jī)通過USB連接,用C#編寫客戶端,java編寫服務(wù)器,實(shí)現(xiàn)跨平臺的通信。
而標(biāo)準(zhǔn)的Socket方法可以實(shí)現(xiàn)任何平臺和任何進(jìn)程之間的Socket通信,在PC和Android手機(jī)通過USB連接的情況下,可用Android系統(tǒng)的ADB工具進(jìn)行端口的轉(zhuǎn)發(fā),從而使兩端設(shè)備的Socket連通。
2 實(shí)現(xiàn)通信的關(guān)鍵技術(shù)
基于以下技術(shù),實(shí)現(xiàn)滿足需求的Socket通信系統(tǒng)框架:
2.1 Socket通信技術(shù)
Socket是一種套接字規(guī)范,利用客戶/服務(wù)器模式,解決了進(jìn)程之間建立通信連接的問題。安裝了TCP協(xié)議軟件和實(shí)現(xiàn)了套接字規(guī)范的設(shè)備之間即可通過Socket進(jìn)行通信。套接字之間連接的過程需要經(jīng)過這三個(gè)步驟:服務(wù)端開啟監(jiān)聽,客戶端發(fā)出請求,服務(wù)端通過監(jiān)聽收到請求后再確認(rèn)連接。兩端連接上后即可進(jìn)行數(shù)據(jù)傳輸?shù)牟僮鳌?/p>
Socket有兩種操作方式,一種使用TCP協(xié)議,在本系統(tǒng)中要求數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,因此采取使用TCP協(xié)議的來傳輸數(shù)據(jù)的方法。
2.2 C#中的套接字編程
.Framework的名字空間和.Socket包含豐富用以網(wǎng)絡(luò)編程的類,其中Socket類為實(shí)現(xiàn)套接字網(wǎng)絡(luò)編程提供了大量方法。
通過Encoding.UTF8.GetBytes(String),C#可以將將字符串轉(zhuǎn)換為UTF-8字節(jié)數(shù)組,通過Encoding.UTF8.GetString(bytes[],0,Length)將UTF-8字節(jié)數(shù)組轉(zhuǎn)換為字符串。
在創(chuàng)建Socket對象后,可通過Send方法發(fā)送字節(jié)數(shù)組形式的數(shù)據(jù),或使用Receive方法接收字節(jié)數(shù)組數(shù)據(jù),再用以上方法轉(zhuǎn)換為相應(yīng)字符串進(jìn)行處理。
2.3 Java中的套接字編程
Java在包中提供了兩個(gè)類,Socket和ServerSocket。服務(wù)端和客戶端之間先建立Socket之間的連接,之后進(jìn)行通信。在服務(wù)端新建ServerSocket對象,循環(huán)執(zhí)行accept方法來監(jiān)聽設(shè)備指定的端口,當(dāng)客戶端有Socket來連接它時(shí),它會接受該Socket的連接請求,同時(shí)在服務(wù)端建立一個(gè)對應(yīng)的Socket對象并和它進(jìn)行通信。這樣兩邊各一個(gè)互相連接的Socket對象,通過兩個(gè)socket傳遞數(shù)據(jù)實(shí)現(xiàn)了通信。
Java同樣提供了字節(jié)數(shù)組和字符串之間的進(jìn)行轉(zhuǎn)換的方法,將字節(jié)數(shù)組轉(zhuǎn)換為字符串的過程如下:
String string = new String(charArray, 0, length);
字符串轉(zhuǎn)換為字節(jié)數(shù)組的過程如下:
byte[] byte = strContent.getBytes("UTF-8");
2.4 用Json將對象序列化
除了傳輸文件數(shù)據(jù)外,在面向?qū)ο缶幊讨?,發(fā)送的數(shù)據(jù)要用實(shí)體類封裝,將封裝的對象存入List()泛型集合中,可以通過序列化List對象來靈活的封裝和傳遞大量數(shù)據(jù)。
因?yàn)榭缯Z言的需要,用Java或C#一方自己的序列化方式是行不通的,而Json提供了一個(gè)通用的序列化格式。
C#可以用開源的項(xiàng)目,在項(xiàng)目中添加引用:using Newtonsoft.Json;和using Newtonsoft.Json.Converters即可使用以下方法:
序列化:
JsonConvert.SerializeObject(string);
反序列化:
JsonConvert.DeserializeObject(obj);
Java可以用開源項(xiàng)目google-gson,在項(xiàng)目中導(dǎo)入這個(gè)項(xiàng)目的第三方j(luò)ar包,然后添加引用:import com.google.gson.Gson;就可使用以下方法:
序列化:
Gson gson=new Gson();
String s=gson.toJson(obj);
反序列化:
Gson gson=new Gson();
Object obj=gson.fromJson(s,Object.class);
2.5 C#啟動(dòng)cmd調(diào)用Android系統(tǒng)的調(diào)試工具ADB
通過C#名字空間System.Diagnostics提供的Process類調(diào)用Windows系統(tǒng)
的cmd.exe,在USB連接的情況下,執(zhí)行“adb forward tcp:12581 tcp:10087”命令轉(zhuǎn)發(fā)端口信息,并通過“adb shell am broadcast -a”命令發(fā)送一個(gè)廣播給Android應(yīng)用程序,以啟動(dòng)Android程序相應(yīng)的service,在service中編寫socket實(shí)現(xiàn)通信。
3 數(shù)據(jù)同步方法實(shí)現(xiàn)流程
根據(jù)以上列舉的關(guān)鍵技術(shù)來設(shè)計(jì)一個(gè)實(shí)現(xiàn)Android應(yīng)用程序和桌面程序通信的模型,分為C#客戶端和Java服務(wù)端兩部分:
3.1 客戶端程序編寫流程如下
⑴C#通過ADB發(fā)送Android系統(tǒng)的BroadCast廣播,來啟動(dòng)Android的Service后臺程序。
⑵新建一個(gè)Socket對象,Android默認(rèn)手機(jī)端的IP為“127.0.0.1”,因此以“127.0.0.1”和指定的端口號為參數(shù),執(zhí)行該對象的Connect方法。
⑶發(fā)送對象時(shí)將要傳遞的對象用Json序列化函數(shù)JsonConvert.SerializeObject()序列化為字符串,再將字符串轉(zhuǎn)換為字節(jié)數(shù)組,最后通過Socket對象的Send方法發(fā)送數(shù)據(jù)。
⑷接收數(shù)據(jù)時(shí)執(zhí)行Socket對象的Receive方法,將得到的字節(jié)數(shù)組轉(zhuǎn)換為字符串,再用JsonConvert.DeserializeObject()方法反序列化字符串得到對象。
⑸程序關(guān)閉時(shí)執(zhí)行Socket對象的close()方法關(guān)閉socket連接,并發(fā)送關(guān)閉service的廣播。
3.2 服務(wù)端程序編寫流程如下
⑴編寫一個(gè)Android端繼承了Service類的后臺運(yùn)行的程序,作為服務(wù)器端,再編寫一個(gè)繼承BroadcastReceiver類的程序來接收廣播,當(dāng)接收到客戶端發(fā)來的廣播時(shí)來打開或關(guān)閉Service。
⑵Service啟動(dòng)的時(shí)候以固定端口號作為參數(shù)新建一個(gè)SocketServer的對象,當(dāng)有客戶端的socket連接時(shí),通過SocketServer的accept方法新建Socket類的對象。
⑶新建BufferedOutputStream對象來發(fā)送Socket要發(fā)送的數(shù)據(jù),新建BufferedInputStream對象來接收Socket對象接收的的數(shù)據(jù)。
⑷新建Gson對象,執(zhí)行該對象的序列化和反序列化方法,將要發(fā)送的數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組,將接收的字節(jié)數(shù)組轉(zhuǎn)換為對象。
⑸Service關(guān)閉時(shí)關(guān)閉通訊流和Socket。
4 結(jié)語
給出了解決C#平臺和基于java的Android平臺的同步通信的一個(gè)方案,總結(jié)了實(shí)現(xiàn)該方案所用到的技術(shù)基礎(chǔ),即Java和c#系統(tǒng)具有基于Socket的靈活通信機(jī)制,并在格式方面可以通過Json進(jìn)行轉(zhuǎn)換。
[參考文獻(xiàn)]
[1]周培.基于Socket的即時(shí)通信系統(tǒng)的研究與實(shí)現(xiàn)[D].廣州:華南大學(xué),2010.
在Internet的通信協(xié)議中,TCP/IP協(xié)議是一組至關(guān)重要的協(xié)議,TCP和UDP又是TCP/IP中兩個(gè)非常重要協(xié)議。TCP被稱為傳輸控制協(xié)議,它是面向連接的通信協(xié)議,采用TCP協(xié)議通信的兩臺計(jì)算機(jī)必須首先建立連接,然后再進(jìn)行數(shù)據(jù)傳送,最后釋放連接。TCP協(xié)議提供了端到端、全雙工通信模式,這種通信模式能保證為應(yīng)用程序提供可靠的、無差錯(cuò)的通信連接,使一臺計(jì)算機(jī)發(fā)出的字節(jié)流準(zhǔn)確無誤地發(fā)送到網(wǎng)絡(luò)中的其它計(jì)算機(jī),對可靠性要求高的數(shù)據(jù)通信系統(tǒng),一般采用TCP協(xié)議傳送數(shù)據(jù)。UDP被稱為用戶數(shù)據(jù)報(bào)協(xié)議,是與TCP相對應(yīng)的協(xié)議。它是面向無連接的協(xié)議,數(shù)據(jù)發(fā)送前不需要建立連接,而是直接就把數(shù)據(jù)包發(fā)送給接收方。
Socket被稱為套接字,在計(jì)算機(jī)網(wǎng)絡(luò)中以雙工方式通信的兩個(gè)進(jìn)程,總要保持一個(gè)連接,從而實(shí)現(xiàn)服務(wù)程序和客戶程序之間的穩(wěn)健通信,這兩個(gè)被連接的端點(diǎn)被稱為套接字。Socket通信就是兩個(gè)進(jìn)程之間基于TCP連接的、端到端的通信,這種通信是雙向的。TCP連接提供數(shù)據(jù)通信所需的字節(jié)流服務(wù),這種服務(wù)是可靠的,一方發(fā)出的字節(jié)流確保能夠到達(dá)對方并被接收,同時(shí)也能夠保證數(shù)據(jù)的完整性。
套接字主要負(fù)責(zé)兩個(gè)進(jìn)程之間的通信,客戶程序向套接字里寫入連接請求和服務(wù)請求,然后服務(wù)器會接收連接請求,并處理這個(gè)請求,最后,服務(wù)器把處理結(jié)果寫入套接字送回客戶程序。具體來說,一個(gè)Socket服務(wù)器應(yīng)用程序會監(jiān)聽某一特定端口,等待Socket客戶程序的連接請求。當(dāng)一個(gè)連接請求到達(dá)時(shí),服務(wù)器和客戶就建立一個(gè)通信連接。在連接過程中,客戶被分配一個(gè)本地端口號,并通過該端口與Socket連接,客戶通過讀寫Socket與服務(wù)器交換數(shù)據(jù)信息,同樣,服務(wù)器也被分配一個(gè)新的端口號,它需要通過這個(gè)新的端口號,來繼續(xù)監(jiān)聽原端口上的其它連接請求。服務(wù)器也給它的本地端口連接一個(gè)Socket,通過讀寫它與客戶交換數(shù)據(jù)信息,以實(shí)現(xiàn)服務(wù)器和客戶機(jī)的通信目的。
目前,用戶可以使用兩類套接字,即TCP協(xié)議采用的流套接字和UDP協(xié)議采用的數(shù)據(jù)報(bào)套接字。流套接字提供了雙向的、有序的、無重復(fù)并且無記錄邊界的數(shù)據(jù)流服務(wù)。數(shù)據(jù)報(bào)套接字支持雙向的數(shù)據(jù)流,但不保證是可靠的、有序的、無重復(fù)的。
2Socket通信工作原理[2]
Socket數(shù)據(jù)通信按照以下步驟進(jìn)行:首先,建立Socket連接。通信正式開始之前,雙方必須相互確認(rèn)身份,在彼此認(rèn)可對方后,建立一條專用的Socket虛擬連接通道。其次,數(shù)據(jù)通信。利用Socket虛擬連接通道發(fā)送和接收數(shù)據(jù),從而實(shí)現(xiàn)服務(wù)器和客戶端的通信。最后,關(guān)閉連接。通信任務(wù)完成后,將所建立的Socket虛擬連接將被拆除,釋放系統(tǒng)資源。在Java面向?qū)ο蟪绦蛟O(shè)計(jì)語言中,開發(fā)包提供的ServerSocket類和Socket類及其方法,可實(shí)現(xiàn)上述操作。Socket工作原理如圖1所示,服務(wù)器端的通信進(jìn)程首先選擇一個(gè)端口號,然后調(diào)用accept()方法對此端口進(jìn)行監(jiān)聽,等待客戶通信進(jìn)程提出連接申請??蛻舳送ㄐ胚M(jìn)程需要先創(chuàng)建Socket對象,在創(chuàng)建Socket對象時(shí),必須指定服務(wù)器端的地址和通信端口號,這個(gè)地址和端口號必須與服務(wù)器監(jiān)端保持一致。如果客戶端的申請得到服務(wù)器端認(rèn)可后,雙方就建立了連接,那么服務(wù)器就利用accept()方法獲取得客戶端Socket對象,并通過該對象雙方進(jìn)行數(shù)據(jù)交換和數(shù)據(jù)通信。
3JavaSocket通信模型[3]
3.1建立Socket連接
首先,在服務(wù)器端創(chuàng)建一個(gè)ServerSocket類的實(shí)例對象,該對象用于監(jiān)聽客戶端的連接請求,代碼如下:ServerSocketserversocket;try{serversocket=newServerSocket(8888);}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}在服務(wù)器端建立ServerSocket對象實(shí)例時(shí),必須使用try...catch語句進(jìn)行異常處理,以防止程序出錯(cuò)時(shí)能及時(shí)處理。在生成ServerSocket對象時(shí),必須選擇一個(gè)合法的端口號,該端口號應(yīng)在1024和65535之間選擇,以免與常用服務(wù)程序的端口號發(fā)生沖突,上例中選用8888作為端口號。
其次,在服務(wù)器端調(diào)用ServerSocket類的serversocket對象的accept()方法進(jìn)行監(jiān)聽,等待客戶端程序的連接請求。在連接請求到達(dá)之前,線程一直處于阻塞狀態(tài),當(dāng)一個(gè)連接請求到來時(shí),初始化連接Socket類的socketobject對象,程序?qū)崿F(xiàn)如下:Socketsocketobject;try{socketobject=serversocket.accept();}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}如果連接成功,accept方法將返回客戶端的socketobject對象實(shí)例。在一般情況下,通過必要的數(shù)據(jù)信息交換,將由另外的服務(wù)程序?qū)iT為該連接提供相應(yīng)的信息服務(wù),而serversocket對象實(shí)例將被釋放出來,繼續(xù)監(jiān)聽其它客戶端的連接請求。
最后,在客戶端建立一個(gè)Socket類的socketobject對象,請求建立連接:Socketsockettobject;try{socketobject=newSocket("Serveraddress",8888);}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}在客戶端建立Socket類的socketobject對象實(shí)例時(shí),必須處理可能發(fā)生異常情況,連接服務(wù)器的地址和端口號必須與服務(wù)器端保持一致,否則,連接將會失敗。
3.2獲得輸入/輸出數(shù)據(jù)流
連接成功后,用Socket類提供的getInputStream()和getOutputStream()方法創(chuàng)建輸入輸出數(shù)據(jù)流對象,同時(shí)要在trycatch塊中進(jìn)行異常處理,代碼如下:try{InputStreaminputstr=socketobject.getInputStream();OutputStreamoutputstr=socketobject.getOutputStream();}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}
3.3讀寫數(shù)據(jù)
在獲取socket對象的輸入輸出流后,為了便于進(jìn)行讀寫操作,需要在這兩個(gè)流對象基礎(chǔ)上建立易于操作的數(shù)據(jù)流DataInputStream、DataOuputStream或PrintStream,用下面的程序代碼實(shí)現(xiàn):DataInputStreamdatainstr=newDataInputStream(inputstr);BufferedReaderbufferrd=newBufferedReader(datainstr);DataOuputStreamdataoutstr=newDataOuputStream(outputstr);PrintStreamprintstr=newPrintStream(outputstr);要讀取一字符串,然后將字符串的長度寫入輸出流,操作語句如下:Stringstring1=bufferrd.readLine();dataos.println(string1.length());
3.4斷開連接
在通信結(jié)束時(shí)必須斷開連接,釋放所占用的資源,關(guān)閉socket。Java提供了close()方法來完成該項(xiàng)任務(wù),語句如下:socketobject.close();//關(guān)閉Socket對象serversocket.close();//關(guān)閉ServerSocket對象
關(guān)鍵詞:socket;TCP/IP協(xié)議;網(wǎng)絡(luò)通信模式;并發(fā)響應(yīng)
中圖分類號:TP393.09
隨著科學(xué)技術(shù)水平的不斷快速提高,互聯(lián)網(wǎng)的網(wǎng)絡(luò)通信應(yīng)用越來越廣泛,已經(jīng)成為人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?,通過互聯(lián)網(wǎng)絡(luò)通信,人們彼此之間可以實(shí)現(xiàn)數(shù)據(jù)傳輸、信息共享等功能,從而提高現(xiàn)代人的生活質(zhì)量。然而互聯(lián)網(wǎng)的數(shù)據(jù)傳輸并不是漫無目的地隨機(jī)傳輸,而是基于一定的通信協(xié)議和通信機(jī)制,TCP/IP通信協(xié)議以及Socket進(jìn)程通信機(jī)制就是現(xiàn)代互聯(lián)網(wǎng)絡(luò)中常見的網(wǎng)絡(luò)通信協(xié)議和通信機(jī)制。特別的,基于Socket的TCP/IP協(xié)議的網(wǎng)絡(luò)通信模式是現(xiàn)代網(wǎng)絡(luò)通信網(wǎng)絡(luò)中常見的通訊模式,來實(shí)現(xiàn)服務(wù)器進(jìn)程和客戶端進(jìn)行的相同通信,從而為互聯(lián)網(wǎng)奠定了通信基礎(chǔ)。所以對于基于Socket通信機(jī)制的TCP/IP網(wǎng)絡(luò)通信模式的研究就有非常重要的現(xiàn)實(shí)意義,可以為我們對于網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)傳輸以及客戶端服務(wù)器模型的構(gòu)建打下堅(jiān)實(shí)的基礎(chǔ)。
1 TCP/IP通信協(xié)議以及Socket提供的編程接口
1.1 TCP/IP通信協(xié)議
一般的,互聯(lián)網(wǎng)絡(luò)通信模型有七個(gè)層次結(jié)構(gòu),分別為應(yīng)用層,表示層,會話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層以及物理層,而TCP/IP協(xié)議是應(yīng)用在傳輸層和網(wǎng)絡(luò)層的傳輸控制以及因特網(wǎng)的互聯(lián)協(xié)議,用來規(guī)定網(wǎng)絡(luò)設(shè)備如何接入到互聯(lián)網(wǎng)以及設(shè)備之間的數(shù)據(jù)傳輸?shù)臉?biāo)準(zhǔn)。
在實(shí)際的互聯(lián)網(wǎng)絡(luò)中,當(dāng)有兩臺計(jì)算機(jī)相互通信時(shí),基于TCP/IP通信協(xié)議的要求,首先兩臺計(jì)算機(jī)要建立連接,然后進(jìn)行數(shù)據(jù)通信。建立連接和數(shù)據(jù)傳送的過程都是通過TCP/IP報(bào)文的形式發(fā)送的,首先發(fā)送計(jì)算機(jī)會將通信數(shù)據(jù)或者連接請求打包成TCP/IP報(bào)文的形式通過二者之間相連的互聯(lián)網(wǎng)絡(luò)電纜線以及路由網(wǎng)關(guān)等網(wǎng)絡(luò)設(shè)備進(jìn)行通信,而通信報(bào)文中會攜帶TCP/IP協(xié)議相關(guān)的識別字符串以及IP地址等在路由中進(jìn)行選擇,進(jìn)而送至目標(biāo)計(jì)算機(jī)?;赥CP/IP通信協(xié)議的報(bào)文格式如圖1所示。
在互聯(lián)網(wǎng)中發(fā)送的數(shù)據(jù)幀中,是包含各種協(xié)議的識別部分,其中TCP/IP協(xié)議的通信協(xié)議識別符就包含在數(shù)據(jù)幀中,并以圖1.格式所示。每個(gè)數(shù)據(jù)幀中,去掉其他協(xié)議的頭部識別數(shù)據(jù),就可以得到TCP/IP協(xié)議的通信報(bào)文,該數(shù)據(jù)報(bào)文包括了IP協(xié)議的識別數(shù)據(jù)以及TCP協(xié)議的識別數(shù)據(jù)。通信報(bào)文中IP頭數(shù)據(jù)包括了兩臺計(jì)算機(jī)的應(yīng)用程式使用的IP協(xié)議版本以及IP頭首部長度等等標(biāo)示IP協(xié)議的信息,最重要的,包含了發(fā)送該條通信報(bào)文的源地址和目的地址,他們是以IP地址的二進(jìn)制標(biāo)示在數(shù)據(jù)報(bào)文中,通過該報(bào)文中的目的地址,通信數(shù)據(jù)就可以在互聯(lián)網(wǎng)絡(luò)中根據(jù)路由器中的路由列表來查找目的IP地址并自動(dòng)選擇路由,從而發(fā)送至目標(biāo)計(jì)算機(jī)。同樣的,將IP通信報(bào)文去除IP頭數(shù)據(jù)后就可以得到TCP協(xié)議的通信報(bào)文,而TCP協(xié)議的頭數(shù)據(jù)中,也包含了TCP通信的各種識別數(shù)據(jù)。在TCP協(xié)議頭數(shù)據(jù)中包含了端口號、序列號、驗(yàn)證信息等內(nèi)容,其中對通信來說比較重要的就是端口號數(shù)據(jù),它包含了兩臺通信計(jì)算機(jī)的數(shù)據(jù)發(fā)送方的發(fā)送端口以及數(shù)據(jù)接收方的接收端口,從而使得這條TCP/IP通信報(bào)文在找到目標(biāo)計(jì)算機(jī)后可以通過目的端口將該信息傳送至應(yīng)用程序,從而實(shí)現(xiàn)兩臺計(jì)算機(jī)的信息通信。所以對于兩臺計(jì)算機(jī)進(jìn)行同時(shí)通信時(shí),TCP/IP協(xié)議為發(fā)送的通信數(shù)據(jù)提供了通信識別符以及進(jìn)行識別符,即目的IP地址和目的端口,通過識別符,通信數(shù)據(jù)就可以通過網(wǎng)絡(luò)發(fā)送至目標(biāo)計(jì)算機(jī),從而實(shí)現(xiàn)互聯(lián)網(wǎng)的通訊。
1.2 Socket
Socket是面向客戶/服務(wù)器模型而設(shè)計(jì)的,針對客戶與服務(wù)器程序之間的相互通信而提供的通信機(jī)制。Socket通常被稱為“套接字”,通過Socket“套接字”的方式,計(jì)算機(jī)中的應(yīng)用程序來向網(wǎng)絡(luò)發(fā)送各種請求以及對網(wǎng)絡(luò)的請求進(jìn)行應(yīng)答。Socket是獨(dú)立于TCP/IP協(xié)議,工作在IP通信報(bào)文以及計(jì)算機(jī)應(yīng)用層之間的網(wǎng)絡(luò)編程接口,其中包含了流失套接字(SOCK_STREAM),數(shù)據(jù)包套接字(SOCK_DGRAM)以及原始套接字(SOCK_RAW)。流式套接字為應(yīng)用層提供了一個(gè)面向連接的可靠的數(shù)據(jù)傳輸服務(wù),可是使網(wǎng)絡(luò)層的傳輸報(bào)文向應(yīng)用層無差錯(cuò)、無重復(fù)地按照順序接收;數(shù)據(jù)報(bào)套接字則提供了無連接服務(wù),此時(shí)數(shù)據(jù)包可以獨(dú)立的數(shù)據(jù)包進(jìn)行發(fā)送而沒有具體的保障措施;原始套接字則是為應(yīng)用層提供了對IP、ICMP等網(wǎng)絡(luò)協(xié)議的低層次的訪問。
2 使用Socket實(shí)現(xiàn)TCP/IP網(wǎng)絡(luò)通訊模式
由于TCP/IP通信協(xié)議的核心是在傳輸層、網(wǎng)絡(luò)層以及物理接口層,但是他們只是向外提供了原始的不是直接的用戶服務(wù)接口,開發(fā)者不可能直接編寫TCP/IP協(xié)議頭來發(fā)送具體的數(shù)據(jù)信息,而Socket則為TCP/IP通信協(xié)議提供了獨(dú)立于協(xié)議的網(wǎng)絡(luò)編程接口。通過Socket提供的網(wǎng)絡(luò)編程接口,應(yīng)用程式就可以通過Socket套接字接口來讀取來自網(wǎng)絡(luò)的IP通信報(bào)文,從而獲取源計(jì)算機(jī)發(fā)送的數(shù)據(jù)信息,所以,可以根據(jù)TCP/IP協(xié)議和Socket來實(shí)現(xiàn)兩臺計(jì)算機(jī)的通信框架。
常見的請求響應(yīng)的實(shí)現(xiàn)方案有兩種,包括并發(fā)響應(yīng)和重復(fù)響應(yīng)。并發(fā)響應(yīng)模型是處在等待狀態(tài)的目標(biāo)計(jì)算機(jī)在源計(jì)算機(jī)發(fā)送數(shù)據(jù)到達(dá)后通過產(chǎn)生子進(jìn)程來響應(yīng)源計(jì)算機(jī)請求而父進(jìn)程繼續(xù)等待請求,重復(fù)響應(yīng)模型是維護(hù)請求列表并按照FIFO的原則對源計(jì)算機(jī)的請求進(jìn)行處理。利用Socket創(chuàng)建并發(fā)響應(yīng)模型時(shí),首先創(chuàng)建新的Socket并將端口以及本地地址賦值給它,然后讓Socket開始對端口進(jìn)行監(jiān)聽,而此時(shí),源計(jì)算機(jī)可以通過發(fā)送包含有目標(biāo)計(jì)算機(jī)的IP地址和端口號的IP協(xié)議通信報(bào)文來向目標(biāo)計(jì)算機(jī)發(fā)送請求,此時(shí)目標(biāo)計(jì)算機(jī)的Socket就可以通過監(jiān)聽端口發(fā)現(xiàn)有請求到達(dá),然后就可以產(chǎn)生新的Socket進(jìn)行對源計(jì)算機(jī)發(fā)送的IP通信請求進(jìn)行處理,而原有的Socket進(jìn)行則繼續(xù)對端口進(jìn)行監(jiān)聽。重復(fù)響應(yīng)的通信框架與并發(fā)響應(yīng)通信框架不同的是在創(chuàng)建的Socket監(jiān)聽到端口有請求發(fā)送時(shí)會直接對請求處理而不會創(chuàng)建新的Socket進(jìn)程,所以需要對源計(jì)算機(jī)的請求進(jìn)行列表維護(hù),來對所有監(jiān)聽到的請求進(jìn)行相應(yīng)。
總的來說,TCP/IP協(xié)議為傳輸數(shù)據(jù)提供了通信識別標(biāo)示,這樣通信數(shù)據(jù)可以在互聯(lián)網(wǎng)中自動(dòng)查詢路由來到達(dá)目標(biāo)計(jì)算機(jī)和目標(biāo)端口,而Socket則對目標(biāo)端口進(jìn)行實(shí)時(shí)監(jiān)聽,當(dāng)有發(fā)送數(shù)據(jù)到達(dá)時(shí),Socket就可以將傳輸數(shù)據(jù)提供給應(yīng)用層,從而實(shí)現(xiàn)兩臺計(jì)算機(jī)之間通過互聯(lián)網(wǎng)絡(luò)的通信。
參考文獻(xiàn)
[1]劉駿,顏鋼鋒.基于Socket的網(wǎng)絡(luò)編程技術(shù)及其實(shí)現(xiàn)[J].江南大學(xué)學(xué)報(bào),2004(03).
[2]徐向東,周國祥,石雷.基于TCP/IP和Winsock文件上傳的應(yīng)用研究[J].合肥工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2008(11).
[3]王靜,曲鳳娟.基于Socket的多用戶并發(fā)通信的設(shè)計(jì)[J].福建電腦,2007(03).
[4]羅亞非.基于TCP的Socket多線程通信[J].電腦知識與科技,2009,03.
關(guān)鍵詞:嵌入式;socket;串口通信;網(wǎng)絡(luò)通信
本文的背景是研究通過對攝像頭的遠(yuǎn)程控制從而對運(yùn)動(dòng)圖像加以采集和處理。該系統(tǒng)的音視頻編解碼部分,是基于windows系統(tǒng)用vc進(jìn)行的開發(fā),實(shí)現(xiàn)對圖像視頻的編解碼處理,攝像頭的遠(yuǎn)程控制系統(tǒng)主要是通過linux系統(tǒng)設(shè)計(jì)。統(tǒng)通過串口和網(wǎng)絡(luò)進(jìn)行傳輸和控制。系統(tǒng)采用c/s模型,pc機(jī)作為client端,根據(jù)采集到的數(shù)據(jù)進(jìn)行編解碼后,發(fā)送出對攝像頭的控制命令,通過網(wǎng)絡(luò)傳輸?shù)絘rm9平臺上,arm平臺作為server端在接收到client端發(fā)送的命令后,通過串口發(fā)送命令來控制攝像頭。
1 串口通信
1.1 linux下串口通信基本原理
linux系統(tǒng)將設(shè)備和文件的操作都作為對文件的處理,所以對設(shè)備的操作,內(nèi)核會返回一個(gè)文件描述符,需要將其作為參數(shù)傳給相對應(yīng)的函數(shù)。linux中所有的設(shè)備文件都放在“/dev”目錄下,通過“ttys+編號”命名相應(yīng)的串口資源,所以對應(yīng)路徑是“/devttys*”。因而可以相對文件讀寫那樣訪問一個(gè)串口設(shè)備。
1.2 linux下的串口設(shè)置
首先要對串口進(jìn)行設(shè)置,在termios.h完成對波特率等的設(shè)置。
struct termios
{tcflag t c iflag;
tcflag t c oflag;
tcflag t c cflag;
tcflag t c lflag;
cc t c cc [nccs];
};
open()函數(shù):int fd = open ("/dev/ttys *", o rdwr|o noctty|o ndela y);
然后調(diào)用read()和write()函數(shù)讀寫端口,返回實(shí)際讀寫的字節(jié)數(shù),如果有錯(cuò)誤發(fā)生則返回-1。
讀取串口結(jié)束后,首先恢復(fù)串口原始屬性,然后才可以關(guān)閉串口并退出程序。
1.3 串口控制應(yīng)用程序
下面給出本系統(tǒng)中一個(gè)通過串口控制攝像頭的函數(shù)的一部分結(jié)構(gòu):
void sendmsg(int pan,int tilt)
{struct timeval timeout;
static char *driver = "/dev/ttys1";
timeout.tv_sec = 0;
timeout.tv_usec = 0;
formcmd(buf,pan,tilt);
fd = uart_open(driver,b9600);
write(fd,buf,16);
close(fd);
}
2 網(wǎng)絡(luò)通信
2.1 socket基本原理介紹
socket是一種通信機(jī)制,客戶/服務(wù)器系統(tǒng)既可以在本地單機(jī)上運(yùn)行,也可以在網(wǎng)絡(luò)中運(yùn)行。
首先需要了解socket中的一些重要函數(shù):
1) 創(chuàng)建socket:int socket( intdomain, inttype, intprotocol);
2) 配置socket:bind函數(shù)指定本地信息int bind( intsocket, const structsockaddr* address, size_taddress_len);
3) 使用listen( )和accept( )函數(shù)獲取遠(yuǎn)端信息:
int listen(int socket, int backlog);
int accept(int socket, struct sockaddr* address, size_t* address_len);
4) 通信處理:send( ),write( ),recv( ),read( )。
5) 通信結(jié)束:使用closesocket( )。
2.2 windows和linux下socket應(yīng)用程序
客戶端程序:創(chuàng)建一個(gè)未命名的套接字,然后把它連接到服務(wù)器套接字server_socket上,向服務(wù)器寫一個(gè)字符,再讀回經(jīng)服務(wù)器處理后的一個(gè)字符。
服務(wù)器端程序:首先創(chuàng)建一個(gè)服務(wù)器套接字,綁定到一個(gè)名字,然后創(chuàng)建一個(gè)監(jiān)聽隊(duì)列,接收來自客戶程序的連接。
下面我們分別在windows和linux下進(jìn)行socket編程,實(shí)現(xiàn)二者之間的通信,具體函數(shù)實(shí)現(xiàn)的主要部分如下:
windows下作為client端:
{
socketclient=socket(af_inet,sock_stream,0);
addrsrv.sin_addr.s_un.s_addr=inet_addr("192.168.1.10");
while(1)
send(socketclient,sendbuffer,16,0);
closesocket(socketclient);
wsacleanup();
}
linux下作為server端:
{
server_sockfd = socket(af_inet, sock_stream, 0);
server_address.sin_addr.s_addr = inet_addr("192.168.1.10");
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
listen(server_sockfd, 5);
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
while(1)
read(client_sockfd, str,16);
close(client_sockfd);
}
3 結(jié)束語
本文設(shè)計(jì)了基于嵌入式平臺上可移動(dòng)攝像頭遠(yuǎn)程控制,對串口通信和網(wǎng)絡(luò)通信的原理和機(jī)制加以闡述,對串口驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)的編寫提出了具體的方法,并且在實(shí)際的操作應(yīng)用中給出了具體函數(shù)的編寫。本文所提供的處理方法已在實(shí)際的項(xiàng)目中的得到應(yīng)用,對于其他的通過串口通信和網(wǎng)絡(luò)通信控制的設(shè)備,具有參考意義,今后我們還將展開進(jìn)一步的相關(guān)研究。
參考文獻(xiàn):
[1] 劉智國,張海春.基于s3c2410的嵌入式串口通信設(shè)計(jì)[j].微計(jì)算機(jī)信息(嵌入式與soc),2009,25(4-2).
關(guān)鍵詞:VC++6.0; UDP協(xié)議; Socket; FTP協(xié)議
中圖分類號:TN94834文獻(xiàn)標(biāo)識碼:A文章編號:1004373X(2011)23005203
Design of Network Communication Based on VC++ 6.0
SUN Junwen, AN Ni, WANG Zhongxun
(Institute of Science and Technology for OptoElectronics Information, Yantai University, Yantai 264005, China)
Abstract: Network communication is a data exchange process through Internet. With the continuous development of Internet technology, network communication technology has been applied to remote control and various instant communications in various industries. The network communication system based on VC++ 6.0 was designed, the network instant communication by using VC++ 6.0 builtin socket and UDP protocol was realized, and the file transfer based on FTP protocol was achieved. The system is intuitive, has high reliability and nearly won′t happen data loss when transferring files. It has widely application value.
Keywords: VC++ 6.0; UDP protocol; Socket; FTP protocol
收稿日期:20110601
基金項(xiàng)目:山東省自然科學(xué)基金資助項(xiàng)目(ZR2009GM026)0引言
隨著計(jì)算機(jī)技術(shù)和現(xiàn)代通信技術(shù)的發(fā)展,人類已經(jīng)步入以數(shù)字化和網(wǎng)絡(luò)化為特征的知識經(jīng)濟(jì)時(shí)代。傳統(tǒng)的通信模式如電話線路其成本高而且可視化的程度不如網(wǎng)絡(luò)通信。隨著網(wǎng)絡(luò)的普及,網(wǎng)絡(luò)通信的優(yōu)勢已經(jīng)逐步顯現(xiàn),將成為未來人們通信的一種重要的方式[1]。
VC++6.0是一種面向?qū)ο蟮挠?jì)算機(jī)程序設(shè)計(jì)語言,其界面友好,功能強(qiáng)大,可移植性好,廣泛應(yīng)用于各個(gè)行業(yè),它既支持面向過程的程序設(shè)計(jì),也支持面向?qū)ο蟮某绦蛟O(shè)計(jì),適合大中小型的項(xiàng)目開發(fā),因此本系統(tǒng)采用VC++6.0進(jìn)行開發(fā)設(shè)計(jì)[2]。
利用VC++6.0的MFC設(shè)計(jì)網(wǎng)絡(luò)通信,已經(jīng)成為一種主流的設(shè)計(jì)方案,伴隨著以太網(wǎng)的逐步發(fā)展,基于VC++6.0的網(wǎng)絡(luò)通信可以有助于人們之間的信息交互,在未來的發(fā)展中將會得以進(jìn)一步的成熟和完善。
1軟件系統(tǒng)總體設(shè)計(jì)流程
網(wǎng)絡(luò)通信是人與人之間通過網(wǎng)絡(luò)資源進(jìn)行信息交流與傳遞。局域網(wǎng)中最常用的有3個(gè)網(wǎng)絡(luò)協(xié)議:MICROSOFT的NETBEUI、NOVELL的IPX/SPX和交叉平臺TCP/IP,由于只有TCP/IP允許與Internet完全地連接,所以本系統(tǒng)采用TCP/IP協(xié)議[3]。
在通信的過程中,位于局域網(wǎng)中的客戶端可以與IP網(wǎng)絡(luò)相連,通過VC++6.0內(nèi)置的IP控件實(shí)現(xiàn)端與端之間的信息交互。網(wǎng)絡(luò)整體架構(gòu)如圖1所示。
圖1網(wǎng)絡(luò)整體架構(gòu)圖本系統(tǒng)包括即時(shí)通信模塊和文件傳輸模塊。采用基于對話框的MFC設(shè)計(jì),基于事件觸發(fā)的思想,界面設(shè)計(jì)包括基于VC的網(wǎng)絡(luò)通信設(shè)計(jì)總界面、私聊界面和用戶設(shè)置界面,其中總界面通過按鍵可以實(shí)現(xiàn)選擇文件傳送還是聊天功能,這些功能通過手動(dòng)觸發(fā)實(shí)現(xiàn)。系統(tǒng)總體設(shè)計(jì)流程如圖2所示[4]。
2系統(tǒng)設(shè)計(jì)思想
2.1聊天功能設(shè)計(jì)思想
本系統(tǒng)設(shè)計(jì)的聊天功能主要是基于UDP協(xié)議的通信,采用Socket接口,所謂Socket通常也稱作“套接字”,應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。Socket是建立網(wǎng)絡(luò)連接時(shí)使用的,在連接成功時(shí),應(yīng)用程序兩端都會產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會話,是TCP/IP網(wǎng)絡(luò)的API[5]。
圖2程序流程圖Socket有流式Socket(SOCK_STREAM)和數(shù)據(jù)報(bào)式Socket(SOCK_DGRAM)。流式Socket是一種面向連接的Socket,針對于面向連接的TCP服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式Socket是一種無連接的Socket,對應(yīng)于無連接的UDP服務(wù)應(yīng)用。在本系統(tǒng)中采用基于UDP的數(shù)據(jù)報(bào)式Socket。下面簡要分析兩者的優(yōu)缺點(diǎn)[6]。
TCP協(xié)議基于三次握手機(jī)制,可以保證數(shù)據(jù)的安全性,順序進(jìn)行數(shù)據(jù)傳輸,但是TCP必須創(chuàng)建并且保持一個(gè)連接,這給系統(tǒng)增加了開銷,而UDP協(xié)議盡最大可能進(jìn)行保溫傳送,所以有效性遠(yuǎn)遠(yuǎn)不如UDP協(xié)議,因此一般的即時(shí)通信中都采用UDP協(xié)議,本系統(tǒng)采用了基于UDP協(xié)議設(shè)計(jì)聊天程序[7]。
聊天的創(chuàng)建程序如下:
wVersoinRequested = MAKEWORD(1,1);
m_socket=socket(AF_INET,SOCK_DGRAM,0);//創(chuàng)建一個(gè)UDP套接字
if(INVALID_SOCKET==m_socket)
{
MessageBox(″套接字創(chuàng)建失敗!″);
return FALSE;
}
retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));//綁定
if(SOCKET_ERROR==retval)
{
closesocket(m_socket);
MessageBox(″綁定失敗!″);
return FALSE;
}
2.2文件傳輸功能設(shè)計(jì)思想
文件傳輸協(xié)議是一個(gè)用于不同的主機(jī)之間進(jìn)行文件傳送的協(xié)議標(biāo)準(zhǔn),用來實(shí)現(xiàn)文件之間的共享、鼓勵(lì)間接或者隱式地使用遠(yuǎn)程計(jì)算機(jī)、向用戶屏蔽不同主機(jī)中各種文件存儲系統(tǒng)的細(xì)節(jié)和進(jìn)行可靠及高效地傳輸數(shù)據(jù)。在本系統(tǒng)的設(shè)計(jì)中采用TCP協(xié)議實(shí)現(xiàn)了文件的可靠傳輸與不同主機(jī)之間的資源共享[8]。
FTP有主動(dòng)和被動(dòng)兩種模式。主動(dòng)模式下有客戶端和服務(wù)器端,并要求二者同時(shí)打開并監(jiān)聽端口,是一種面向連接的傳輸;被動(dòng)模式下只要求服務(wù)器產(chǎn)生意見監(jiān)聽端口的進(jìn)程,這樣程序的運(yùn)行就可以繞過防火墻。所以在本設(shè)計(jì)中采用了被動(dòng)模式[9]。
文件傳輸?shù)闹鞒绦蛟O(shè)計(jì)如下:
IPselect=m_listIP.GetItemText(n,0);//獲取選中的IP
CFileDialog fileDlg(TRUE);//文件對話框?yàn)榇蜷_
if(IDOK == fileDlg.DoModal())//如果按確定按鈕
{
CString filename=fileDlg.GetFileName();
CFile fileOpen;
if(!fileOpen.Open(fileDlg.GetPathName(),CFile::modeRead | CFile::typeBinary))
{
AfxMessageBox(″無法打開文件″, MB_OK | MB_ICONERROR);
return;
}
int len=fileOpen.GetLength();
char* data = new char[len];
fileOpen.Read(data,len);//讀入文件內(nèi)容
char *cc=new char[10000];
memset(cc,0,10000);
sprintf(cc,″%d%s%s%d%s%d%s%s%s″,strlen(IPselect),″文件″,IPselect,len,″@″,
filename.GetLength(),″@″,filename,data);
senddata(cc);
fileOpen.Close();
MessageBox(″文件發(fā)送完成!″);
}
3各功能模塊的設(shè)計(jì)
系統(tǒng)的界面分為總界面設(shè)計(jì),私聊界面和用戶設(shè)置界面三大部分,三部分分別執(zhí)行相應(yīng)的功能,下面逐步進(jìn)行介紹。
3.1總界面設(shè)計(jì)
該模塊是整個(gè)系統(tǒng)的基礎(chǔ)模塊,它負(fù)責(zé)初始化整個(gè)應(yīng)用程序,首先初始化套接字,并接收和發(fā)送各種消息信息,然后根據(jù)收到的信息進(jìn)行判斷該執(zhí)行什么功能,進(jìn)而建立應(yīng)用進(jìn)程。在該界面的設(shè)計(jì)當(dāng)中為了使用戶方便進(jìn)行操作,建立了一個(gè)包含用戶的IP地址和主機(jī)名的IP地址列表。在該界面的右側(cè)是群聊窗口可以向所有的用戶發(fā)送數(shù)據(jù),并接收其他用戶發(fā)來的消息。
為了方便用戶操作,最右側(cè)是一個(gè)該系統(tǒng)的介紹,最下面的幾個(gè)按鈕是方便用戶進(jìn)行功能選擇所建立的,從而使該系統(tǒng)看起來比較直觀。
3.2用戶設(shè)置界面設(shè)計(jì)
在該系統(tǒng)的通信過程中,如果靠記憶用戶的IP地址來進(jìn)行通信,容易使人煩躁,所以增加這個(gè)模塊,來使該系統(tǒng)更加地人性化。在軟件的使用中可以先進(jìn)行通信獲得其他用戶的信息后,點(diǎn)擊設(shè)置按鈕來更改主機(jī)名,也可以修改自己的主機(jī)名。通過這兩種方式可以讓用戶更加自主地設(shè)計(jì)主機(jī)名,并且方便用戶識別自己的信息。
在該界面中包含自己的IP地址、所在的IP網(wǎng)段和主機(jī)名三部分,用戶可以自主修改。修改后在主界面中就會顯示用戶信息了。
3.3私聊界面設(shè)計(jì)
該模塊可以和指定的用戶進(jìn)行聊天。可以通過選中IP列表中的用戶信息單擊進(jìn)行私聊,但是用戶不能和自己進(jìn)行聊天,聊天的內(nèi)容不會被其他用戶看到。
在該程序設(shè)計(jì)中,應(yīng)用了UDP協(xié)議,界面中安置了三個(gè)按鈕:清空、發(fā)送、關(guān)閉,從而方便用戶進(jìn)行操作。該系統(tǒng)運(yùn)行時(shí),當(dāng)一方退出程序,就會通知另一方,并把聊天記錄存于指定的文本中,如果該文本已經(jīng)存在,則把聊天記錄插到該文本的后面,并保存該記錄,方便用戶日后進(jìn)行查看。
3.4刷新模塊設(shè)計(jì)
該模塊可以手動(dòng)進(jìn)行刷新用戶信息,可以解決網(wǎng)絡(luò)不同步帶來的IP地址列表不能及時(shí)更新的問題,單擊刷新按鈕,系統(tǒng)會清空自己的IP地址列表,并向局域網(wǎng)發(fā)送自己的IP主機(jī)名和地址信息,其他用戶收到后會恢復(fù)自己的IP地址和主機(jī)名,然后系統(tǒng)會更新自己的IP列表,從而達(dá)到網(wǎng)絡(luò)的同步功能[10]。
3.5發(fā)送文件模塊設(shè)計(jì)
該模塊可以向指定的用戶發(fā)送文本文件。用戶可以選中IP列表中的用戶,單擊發(fā)送文件按鈕,把要發(fā)送的文本文件發(fā)送給指定的用戶,對方接收后,會提示進(jìn)行保存處理。
4系統(tǒng)功能測試
私聊界面可以通過點(diǎn)擊私聊開啟,當(dāng)編寫完要發(fā)送的數(shù)據(jù)時(shí)點(diǎn)擊發(fā)送即可,點(diǎn)擊關(guān)閉按鈕會彈出提示框,詢問用戶是否要退出該進(jìn)程,如圖3所示。
文件傳送功能的使用,首先選擇完用戶后,單擊文件傳送,會彈出如圖4所示的界面要求用戶選擇要傳送的文件,在接收端,則要求用戶選擇存放的位置。
圖3私聊界面圖4文件傳送界面顏色的設(shè)定,由于不同的人有不同的喜好,所以增加該模塊來方便用戶設(shè)置背景顏色,如圖5所示。
圖5背景顏色設(shè)定5結(jié)語
本文給出了一種基于UDP和FTP協(xié)議的網(wǎng)絡(luò)通信設(shè)計(jì)方案,實(shí)現(xiàn)了基于UDP的即時(shí)通信和基于FTP協(xié)議的文件傳輸。本設(shè)計(jì)最大的優(yōu)點(diǎn)是操作直觀,可靠性高,文件傳送中幾乎不會發(fā)生數(shù)據(jù)的丟失。其主要缺點(diǎn)是沒能實(shí)現(xiàn)視頻的通信,其功能還不夠全面,但是在一些小型的局域網(wǎng)中,由于其占用內(nèi)存少且無需安裝,因而有廣泛的實(shí)際應(yīng)用價(jià)值。
參考文獻(xiàn)
[1]馬丹.即時(shí)通信系統(tǒng)終端的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2004.
[2]熊華勝,邊信黔.VC++ 6.0環(huán)境下實(shí)現(xiàn)基于UDP協(xié)議的異步廣播通信[J].應(yīng)用科技,2004,31(2):4446.
[3]中國教育和科研計(jì)算機(jī)網(wǎng).網(wǎng)絡(luò)協(xié)議TCP/IP、IPX/SPX、NETBEUI簡介[EB/OL].[19940111]./20010830/210056.shtml.
[4]胡春安,胡中棟.MFC中對話框的創(chuàng)建和應(yīng)用[J].電腦開發(fā)與應(yīng)用,2005(9):5859.
[5]楊陽,唐波.遠(yuǎn)程控制軟件編程之多用戶顯示[J].黑客防線,2009(1):110112.
[6]陳海蕊,郝世選.VC中基于Socket的局域網(wǎng)監(jiān)控軟件[J].濮陽職業(yè)技術(shù)學(xué)院學(xué)報(bào),2009,22(6):136138.
[7]宋hh,吳剛,杜剛.基于UDP協(xié)議的數(shù)據(jù)傳輸[J].中國電子商情:通信市場,2010(2):176179.
[8]張喻平.基于互聯(lián)網(wǎng)的視頻遠(yuǎn)程回放技術(shù)的研究[D].武漢:武漢工業(yè)學(xué)院,2007.
[9]張承釗.互聯(lián)網(wǎng)轉(zhuǎn)換網(wǎng)關(guān)中FTPALG的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2006.
[10]陳小兵.IP編址原則[J].網(wǎng)管員世界,2005(7):107.
作者簡介: 孫軍文男,1968年出生,山東煙臺人,中級實(shí)驗(yàn)師。主要研究方向?yàn)槲锢韺?shí)驗(yàn)。