




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、工作站與PC之間進程的實時通訊 摘 要 該文簡要介紹了SUN工作站與PC之間進行通訊的常用方法,著重論述了一種基于Socket編程,實現進程間直接實時通訊的方法,并舉例說明。隨著機的日益普及和應用領域的不斷擴展,人們對計算機性能的要求也越來越高,特別是在計算、圖形圖像處理、工程、計算機輔助設計和制造(CAD/CAM)以及軟件工程等領域。這些領域的要求對于一般的微型計算機來說是難以勝任的,而工作站的出現又恰好滿足了這些方面的需要。SUN工作站是工作站中的典型代表,由于它采用了RISC技術等一系列先進的技
2、術和方法,使得其性能價格比遠遠超出傳統(tǒng)的微、小型計算機系統(tǒng),因而具有很高的市場占有率。另一方面,IBM PC及其兼容機在我國也相當普遍,它們在各行各業(yè)得到了廣泛的應用,擁有眾多的用戶和軟硬件產品。如何將SUN工作站與PC這兩者之間有機地結合起來,使它們各盡其長,就成了一個非常現實的問題。比如在分布式應用系統(tǒng)中,由于PC擁有眾多像開關量和模擬量這樣的I/O接口板,因此可以用它作為控制現場中的下位機,完成現場數據的實時采集與相關的控制操作;而用SUN工作站作為上位機,進行總的數據處理和分析。在這樣的分布式應用系統(tǒng)中,SUN工作站與PC之間的通訊便是一個十分關鍵的問題。SUN工作站與PC之間的通訊可
3、分為兩個方面:一是硬件連接,二是軟件編程。對于硬件連接,一般說來可有以下兩種作法,第一種是利用SUN工作站本身的RS-232/RS-423串口與PC的RS-232串口,進行串行異步通訊。這種方法最大的優(yōu)點是成本低,缺點是數據傳輸速度慢,數據的查錯和糾錯工作需由用戶自己完成,另外還需對硬件直接編程。第二種方法是利用SUN工作站本身配備的以太網接口,這時要求也為PC配上一塊網絡接口卡,兩者通過同軸電纜相連,構成以太網,從而實現它們之間的通訊。這種方法的優(yōu)點是數據傳輸速度快,非常適合對實時性要求較高的應用項目,再加上有系統(tǒng)軟件與編程工具軟件包的支持,因此編程工作相對來說也比較簡單。該方法的缺點是成本
4、比第一種方法稍高一些。本文將著重介紹一下在第二種硬件連接方式下,即在以太網絡環(huán)境中,為了實現SUN工作站與PC之間的進程通訊,在軟件上需要做的一些工作。我們知道,SUN工作站采用了一種稱為NFS(Network File System)的分布式文件系統(tǒng),該系統(tǒng)最大的優(yōu)點是獨立于機型、操作系統(tǒng)以及網絡體系結構,實現了在異構環(huán)境下的文件共享。在NFS系統(tǒng)的支持下,文件存取對用戶透明,即用戶使用網絡上文件的方法與使用本地文件的方法完全一致。為了實現PC與SUN工作站之間的文件共享,我們還必須在PC上安裝一套稱為PC-NFS的軟件,該軟件由SUN公司提供。在安裝完該軟件之后,PC的用戶就可以像使用本地
5、上的軟、硬盤那樣使用SUN工作站上的文件了。到此為止,由于有了SUN NFS和PC-NFS這兩個系統(tǒng)軟件的相互配合,已經可以完成SUN工作站與PC進程之間的通訊,其通訊方式是通過文件共享。但這種方法在實際應用中往往顯得速度不夠理想,而且由于需要依靠文件作媒介,因此在時間上和操作上造成的額外開銷較大。于是,我們有必要探索一種SUN工作站與PC之間的進程不通過文件共享,而是直接進行實時通訊的方法。作者通過一段時間的摸索與實踐,找到了一種可行的方案,現提出來供大家。這種實現進程間直接通訊方法的實質是在互連網域(Internet Domain)支持的TCP/IP協(xié)議下,進行基于Socket(套接字)系
6、統(tǒng)調用的程序設計。Socket是網絡在傳輸層上提供給應用程序的接口,其目的主要是用來實現網絡上進程之間的通訊。下面我們就通過一個具體的實例來詳細說明這一方法。由于Socket程序設計通常都使用ClientServer(客戶服務器)的模型,因此我們在具體實現上也遵循這一原則,把SUN工作站作為Server, PC作為Client,兩者在程序設計上分工不同。在本例中,我們要完成的任務是在工作站上的進程與在PC上的進程之間進行雙向的數據傳輸,程序中分別各以一個字符串來代表實際要傳送的信息。由于Socket程序設計是一個較為復雜的問題,因此本文不作詳細論述,有關這方面的內容請讀者參考相應書籍(例如SU
7、N公司的Network Programming等)。我們在這里只把程序中需要注意的幾個問題向大家作一簡要說明。1.由于SUN工作站上的進程屬于Server方,因此它必須首先運行,等待來自PCClient方進程的連接請求;2.工作站上的進程運行之后,首先會在屏幕上顯示一個端口(Port)號。端口號是TCP/IP協(xié)議標識進程地址的一個組成部分,因此工作站上進程的端口號連同工作站的機器名稱(HostName)必須要送到PC上要與之進行通訊的那個進程,只有這樣,PC上的進程才知道自己將要與哪一個進程發(fā)生聯系。在本文給出的實例中采用了通過命令行參數傳遞信息的方法,當然也可以使用其它方法;3.在上述實例程
8、序中,進程之間數據的傳輸使用了read()和write()函數,但這兩個函數在用于Socket時與用于文件時的實際操作并不完全一樣。由于網絡本身傳輸特性的限制,它們很可能在一次調用中不能讀出或寫入函數參數中要求的那么多數據量。因此為了完成類似于文件操作read()和write()函數同樣的功能,我們專門編寫了兩個新的函數readpkt()和writepkt(),分幾次讀入或寫出規(guī)定的字節(jié)數;4.工作站上執(zhí)行的程序只要在工作站上編譯和連接后即可投入運行,而在PC上運行的程序必須要有SUN公司提供的PC-NFS Programer's Toolkit軟件包的支持,該軟件包提供了與Socke
9、t調用有關的所有函數。本文PC上的程序是用Borland C+ 3.0編譯程序編譯的,此外,該軟件包也支持Microsoft C語言和Microsoft Windows下應用程序的編程。在生成可執(zhí)行代碼之后,即.EXE文件,就不再依賴該軟件包了,但仍要在PC-NFS系統(tǒng)支持下運行。以上就是SUN工作站與PC進程之間進行實時通訊的一種方法。當然,這里所說的“實時”也只是相對而言的,因為SunOS操作系統(tǒng)屬于UNIX操作系統(tǒng)這一大類,而UNIX操作系統(tǒng)本身是一個分時的操作系統(tǒng),不可能有絕對的實時。但本文討論的這種方法在實際項目中經過檢驗,已經可以滿足實時性的要求,為SUN工作站與PC之間進行高速的
10、數據傳輸開辟了一條新路。最后需要說明的是,本文介紹的進程之間實時通訊的方法不僅適用于SUN工作站與PC之間,而且也適用于連接到該以太網絡上的所有機器,其中包括SUN工作站與SUN工作站之間進程的通訊,PC與PC之間進程的通訊以及它們之間的任意組合。SUN工作站(即Server方)程序:程序文件名:SUN.C執(zhí)行方法:SUN#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h><BR>#include <netdb.h>#include <stdio
11、.h>#define DATA "1234567890"main()int sock,length;struct sockaddr-in server;int msgsock;char buf;int readpkt(),writepkt();sock=socket(AF-INET,SOCK-STREAM,0);IF (SOCK<0) perror("opening stream socket");exit(1);server.sin-family=AF-INET;server.sin-addr.s-addr=INADDR-ANY;serve
12、r.sin-port=0;if (bind(sock,(struct sockaddr *)&server,sizeof server)<0)perror("binding stream socket");exit(1);length=sizeof server;if (getsockname(sock,(struct sockaddr *)&server,&length)<0)perror("getting socket name");exit(1);printf("Socket port #%d"
13、;,ntohs(server.sin-port);(sock,5);msgsock=accept(sock,(struct sockaddr *)0,(int *)0);if (msgsock=-1)perror("accept");exit(1);else dobzero(buf,sizeof buf);if (readpkt(msgsock,buf,1024)<0)perror("reading stream message");break;1 pr
14、inft("%s",buf);strcpy(buf,DATA);if (writepkt(msgsock,buf,1024)<0) perror("writing stream message");break;while (1);close(msgsock);close(sock);return 0;int readpkt(sock,buf,size)int sock;char *buf;int size;int rest, readnum,count;count=0;rest=size-count;while (rest) readnum=rea
15、d(sock,buf,rest);if (readnum<0) return readnum;rest-=readnum;buf+=readnum;return (size-rest);int writepkt(sock,buf,size)int sock;char *buf;int size;int rest,writenum,count;count=0;rest=size-count;while (rest)writenumwrite(sock,buf,rest);if (writenum<0) return writenum;rest-=writenum;buf+=write
16、num;return (size-rest);PC(即Client方)程序:程序文件名:PC.C執(zhí)行方法:PC<SUN工作站名稱><SUN進程端口號>#include <sys/tk-types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <stdio.h>#include <string.h>#define DATA "abcdefghijklmnopqrstuvwxyz"
17、main(argc,argv)int argc;char *argv;int sock;struct sockaddr-in server;struct hostent *hp,*gethostbyname();char buf;int readpkt(),writepkt();sock=socket(PF-INET,SOCK-STREAM,0);if (sock<0)perror("opening stream socket");exit(1);server.sin-family=AF-INET;hp=gethostbyname(argv);if (hp=0)fpr
18、intf(stderr,"%s:unknown host.",argv);exit(2);memcpy(char *)&server.sin-addr,(char *)hp->h-addr,hp->h-length);server.sin-port=htons(atoi(argv);if (connect(sock,(struct sockaddr *)&server,sizeof server)<0)perror("connecting stream socket");exit(1);.do strcpy(buf,DATA);if (writepkt(sock,buf,1024)<0)perror("writing on stream socket");break;mem
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能制造企業(yè)生產管理人才招聘與智能制造協(xié)議
- 二零二五年度立體停車設備研發(fā)與委托運營管理合同
- 二零二五年度航空航天就業(yè)勞動合同
- 二零二五年度叉車安全風險評估與整改合同
- 圍城深度解讀與評析征文
- 新產品市場推廣策略及執(zhí)行方案
- 工業(yè)自動化控制系統(tǒng)設計與維護服務協(xié)議
- 《天文觀測與天體物理學習計劃》
- 行業(yè)市場深度調研分析
- 互聯網+三農營銷模式創(chuàng)新案例集
- H3C-CAS虛擬化平臺詳細介紹
- 藥房品種類別及數量清單
- 玻璃工藝學第4章 玻璃的性質
- 四川省藥械集中采購及醫(yī)藥價格監(jiān)測平臺操作指引
- 機關檔案管理工作培訓PPT課件
- 大學生安全教育課件(ppt共41張)
- 初中物理人教版八年級下冊 第1節(jié)牛頓第一定律 課件
- 網站培訓內容trswcm65表單選件用戶手冊
- 監(jiān)理大綱(范本)
- 空調系統(tǒng)維保記錄表格模板
- 打印版-圓與二次函數綜合題精練(帶答案)
評論
0/150
提交評論