亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        利用socket實現(xiàn)Windows與Linux平臺間的網(wǎng)絡通信

        2013-03-11 10:49:52周西峰郭前崗
        關鍵詞:客戶機窗體服務器端

        周西峰,陸 鵬,郭前崗

        (南京郵電大學 自動化學院,江蘇 南京210023)

        在工業(yè)生產中,人們常把穩(wěn)定性高的Linux系統(tǒng)運用到工業(yè)控制領域,以此來提高控制系統(tǒng)的性能?;赪indows平臺開發(fā)的軟件使用方便,因此工程中的應用軟件大多數(shù)是以Windows為平臺開發(fā)的。在一個工業(yè)系統(tǒng)中,人們需要同時使用Windows和Linux兩種操作系統(tǒng)。為了使兩個不同的操作系統(tǒng)能夠協(xié)同工作并互相傳遞消息,需要在兩者間進行通信。

        在日常工作中,Windows作為PC機的操作平臺被廣泛使用,而Linux也以其開放的優(yōu)勢逐漸被用戶采用。在兩種系統(tǒng)被普遍使用的前提下,如何實現(xiàn)資源共享就成了一個重要的研究課題,需要實現(xiàn)兩個平臺間的互相通信以達到資源共享的目的。

        基于以上兩點,實現(xiàn)Windows與Linux平臺間的網(wǎng)絡通信有著重要的研究意義。本文通過socket(套接字)編程實現(xiàn)兩個系統(tǒng)間的通信,socket是對應TCP/IP協(xié)議的最典型的應用開發(fā)接口,它提供了不同主機間進程通信的端點。本文闡述了套接字的編程原理,并舉例說明如何開發(fā)Linux和Windows系統(tǒng)之間的網(wǎng)絡通信程序。

        1 socket基本原理

        1.1 基本socket函數(shù)[1]

        socket通信涉及的基本函數(shù)有:

        (1)創(chuàng)建套接字

        sockfd=socket(domain,type,protocol);參數(shù)domain指定socket地址簇類型,type為套接字類型,protocol指明socket請求的協(xié)議,sockfd為套接字返回的文件描述符。

        (2)綁定套接字與本地地址信息

        bind(sockfd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));該函數(shù)將本地主機地址以及端口號與所創(chuàng)建的套接字綁定起來。

        (3)監(jiān)聽連接

        listen(sockfd,backlog);此函數(shù)表示服務器愿意接收連接,backlog指隊列中允許的最大排隊請求的個數(shù)。

        (4)建立連接

        connect(sockfd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));connect用于建立連接,server_addr是保存著服務器IP地址和端口號的數(shù)據(jù)結構struct sockaddr。

        (5)接收連接請求

        accept(sockfd,(struct sockaddr*)&client_addr,sizeof(struct sockaddr));用于接收客戶機發(fā)來的連接請求。

        (6)發(fā)送數(shù)據(jù)

        send(sockfd,msg,len,flags);將len字節(jié)的數(shù)據(jù)msg發(fā)送出去,flags通常為0。

        (7)接收數(shù)據(jù)

        recv(sockfd,buf,len,flags);從套接字緩沖區(qū)buf中讀取len字節(jié)長度的數(shù)據(jù)。

        (8)關閉套接字

        close(sockfd);用于關閉套接字連接。

        1.2 socket通信過程

        套接字編程采用客戶機/服務器(C/S)[2]模式,連接成功后,雙方可以進行通信。通信過程如圖1所示。

        圖1 socket通信過程[3]

        2 軟件設計

        為避免使用兩臺計算機的麻煩,在Windows7系統(tǒng)的PC上安裝虛擬機,虛擬機的操作系統(tǒng)是Linux。這樣就可以在一臺PC上進行通信測試,主機為Windows平臺,虛擬機為Linux平臺。

        整個系統(tǒng)采用客戶機/服務器(C/S)模型,將Linux平臺作為服務器端,其IP地址為10.33.17.127,端口號為3352。將Windows平臺作為客戶機端,其IP地址為10.33.17.126。

        2.1 Linux平臺軟件設計

        2.1.1 響應連接

        分別調用socket()、bind()、listen()和accept()來監(jiān)聽客戶機端的連接請求并與之連接。

        2.1.2 select函數(shù)[4]的使用

        select可以完成非阻塞操作,即進程執(zhí)行此函數(shù)時不必等待事件發(fā)生。它能夠監(jiān)視select返回的文件描述符的變化情況,通過返回值來判斷select函數(shù)的執(zhí)行情況。

        首先定義一個集合變量fd_set rfds,分別將標準輸入句柄0和當前連接句柄client_fd加入到集合中。先令maxfd為0,再比較client_fd與maxfd的大小,將兩者中較大的值賦給maxfd,即將文件描述符的最大值賦予maxfd。設置最大等待時間tv.tv_sec=1,tv.tv_usec=0。

        retval=select(maxfd+1,&rfds,NULL,NULL,&tv),通過返回值retval判斷文件的讀寫情況。若retval為-1,則出錯;若retval為0,則繼續(xù)等待;若retval為正值,則文件可讀寫,可以執(zhí)行接下來的發(fā)送和接收消息的操作。

        2.1.3 發(fā)送與接收消息

        if(FD_ISSET(0,&rfds))用來檢查指定文件描述符0是否在該集合rfds中,若滿足則執(zhí)行發(fā)送操作。fgets(buf,MAXBUF,stdin)表示將鍵盤輸入的至多MAXBUF個字符的stdin送到buf中,摁下“Enter”鍵后即可發(fā)送。

        同理,對于是否接收消息通過if(FD_ISSET(client_fd,&rfds))來判斷。

        2.1.4 斷開連接

        若要斷開連接,則輸入“quit”。通過命令if(!strncasecmp(buf,"quit",4))來判斷輸入的內容是否為quit。連接斷開后,顯示框顯示“Client has terminated the communication.”。

        2.2 Windows平臺軟件設計

        在Windows系統(tǒng)中,使用C#語言來編寫socket程序。打開Microsoft Visual Studio 2010,新建一個“Windows窗體應用程序”的項目。在窗體中添加兩個button控件,分別為button1(連接)和button2(發(fā)送)。并添加4個textBox控件,分別為textBox1(消息顯示框)、textBox2(消息輸入框)、textBox3(服務器IP地址輸入框)和textBox4(服務器端口號輸入框)。

        2.2.1 請求連接

        新建socket,Server和nPort分別表示服務器IP地址和端口號,通過命令socket.Connect(ServerIP,nPort)來連接服務器。

        2.2.2 發(fā)送與接收消息

        定義發(fā)送的字符串為Message,將消息輸入框textBox2中的內容指定為Message。通過發(fā)送命令socket.Send(System.Text.Encoding.Default.GetBytes(Message))進行消息發(fā)送。

        新建一個byte數(shù)組byte[]RecvBuffer,通過socket.Receive(RecvBuffer)將接收到的內容存放到RecvBuffer中。接收成功后,將接收到的內容顯示在消息顯示框中。

        3 運行結果與分析

        3.1 編譯并執(zhí)行Linux端程序

        gcc server_socket.c-o server_scoket

        ./server_socket 3352 Server

        此時,服務器端程序準備就緒,等待客戶端請求連接。

        3.2 啟動Windows端的連接

        打開Microsoft Visual Studio 2010軟件,點擊“啟動調試”鍵后彈出窗體界面。點擊窗體界面中的“連接”鍵后,客戶機端能夠成功連接服務器端。

        3.3 實現(xiàn)互相通信

        連接成功后,服務器端和客戶機端可以自由發(fā)送消息。如圖2所示,Windows系統(tǒng)中,在窗體界面的“消息輸入框”中輸入消息,點擊“發(fā)送”后即可發(fā)送。在Linux終端中,輸入要發(fā)送的消息,點擊“Enter”鍵后進行發(fā)送。如圖3所 示。

        圖2 Windows平臺窗體界面顯示

        3.4 結果分析

        結果表明,服務器端和客戶機端在成功連接后能夠進行通信。在Linux系統(tǒng)中,通信結果在終端顯示。在Windows系統(tǒng)中,通信結果在窗體界面中顯示。經測試,兩個平臺間能夠完成無數(shù)次的收發(fā)操作。若要結束通信,在Linux終端中鍵入“quit”,即斷開連接。

        圖3 Linux平臺終端顯示

        本文闡述了Windows與Linux系統(tǒng)的網(wǎng)絡傳輸設計方法,雙方采用TCP/IP協(xié)議,運用socket接口來開發(fā)網(wǎng)絡通信程序。Windows平臺利用C#編寫socket程序,并通過窗體界面顯示通信過程。Linux平臺中的socket程序調用select函數(shù),實現(xiàn)非阻塞操作。套接字使得連接在通信兩端的進程,能夠通過各自的套接字收發(fā)消息,從而實現(xiàn)了兩個平臺間的全雙工通信。目前的通信程序只能傳送字符串,要真正實現(xiàn)兩個系統(tǒng)之間的資源共享與消息傳遞,還需要它們之間能夠傳送文件、照片及視頻等大數(shù)據(jù)量的信息,這將是下一階段的研究重點。

        [1]王遠洋,周淵平,郭煥麗.Linux下基于socket多線程并發(fā)通信的實現(xiàn)[J].微計算機信息,2009,25(5-3):70-72.

        [2]盧寧,李定主,姚暉.Linux和Windows系統(tǒng)之間網(wǎng)絡通信程序的開發(fā)[J].電腦開發(fā)與應用,2002,15(3):23-24.

        [3]郭勇.利用Socket開發(fā)客戶/服務器應用[J].廣西師范大學學報(自然科學版),2000,18(1):24-27.

        [4]陳榮軍,謝舜道,譚洪舟,等.一種基于Select函數(shù)的嵌入式網(wǎng)絡通信信息轉發(fā)機制設計[J].電腦知識與技術,2013,9(1):25-28.

        猜你喜歡
        客戶機窗體服務器端
        Reducing the global cancer burden with gastrointestinal screening: China’s 30 years practice
        試談Access 2007數(shù)據(jù)庫在林業(yè)檔案管理中的應用
        檔案天地(2019年5期)2019-06-12 05:12:02
        淺析異步通信層的架構在ASP.NET 程序中的應用
        成功(2018年10期)2018-03-26 02:56:14
        在Windows中安裝OpenVPN
        基于LayeredWindow的異形窗體局部刷新
        中文信息(2014年2期)2014-03-06 23:49:14
        巧設WPS窗體控件讓表格填寫更規(guī)范
        網(wǎng)頁防篡改中分布式文件同步復制系統(tǒng)
        瘦客戶機:安全與便捷的選擇
        基于Web數(shù)據(jù)提高訪問速度的方法
        基于Struts的Web應用系統(tǒng)數(shù)據(jù)驗證
        日本真人边吃奶边做爽电影| 久国产精品久久精品国产四虎 | 红杏亚洲影院一区二区三区| 久久久久亚洲AV片无码乐播| 国产精品日本一区二区三区在线| 极品粉嫩小仙女高潮喷水网站| 国产肉体xxxx裸体137大胆| 日本一区午夜艳熟免费| 国产精品无码久久久久下载 | 亚洲一区二区国产激情| 久久天天躁狠狠躁夜夜2020一| 久久国产成人精品国产成人亚洲 | 精品亚洲国产亚洲国产| 久久久久成人精品免费播放动漫| 乌克兰粉嫩xxx极品hd| 亚洲爆乳大丰满无码专区| 亚洲国产一区中文字幕| 无套内射在线无码播放| 日产国产精品亚洲系列| 精品国产亚欧无码久久久| 国产免费一区二区三区三| 欧美最猛性xxxx| 国产美女自慰在线观看| 久久精品免视看国产盗摄 | 精品国产免费久久久久久| 日本伦理视频一区二区| 人妻熟妇乱又伦精品hd| 国产人妻无码一区二区三区免费| 精品久久久久久电影院| 有码视频一区二区三区| 色欲网天天无码av| 五十路熟妇亲子交尾| 99久久国产一区二区三区| 亚洲精品中文字幕一区二区| 一性一交一口添一摸视频| 亚洲国产香蕉视频欧美| 亚洲精品在线97中文字幕| 高潮内射双龙视频| 最新国产日韩AV线| 国产精品不卡免费版在线观看 | 日韩精品视频中文字幕播放|