《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 利用socket實現Windows與Linux平臺間的網絡通信
利用socket實現Windows與Linux平臺間的網絡通信
來源:微型機與應用2013年第18期
周西峰,陸 鵬,郭前崗
(南京郵電大學 自動化學院,江蘇 南京210023)
摘要: 介紹了socket的工作原理,構建出一個適用于Windows和Linux操作系統的、跨平臺的網絡通信程序,并給出設計原理和開發步驟。整個系統采用客戶機/服務器(C/S)模型,在Windows系統中,socket程序利用Visual C#語言編寫。Linux系統中的socket程序調用select()函數,則該套接字自動設置為非阻塞方式,從而提高了程序的執行效率。經測試,通信兩端的進程能夠通過各自的套接字收發消息,從而實現了Windows與Linux平臺間的通信。
Abstract:
Key words :

摘  要: 介紹了socket的工作原理,構建出一個適用于Windows和Linux操作系統的、跨平臺的網絡通信程序,并給出設計原理和開發步驟。整個系統采用客戶機/服務器(C/S)模型,在Windows系統中,socket程序利用Visual C#語言編寫。Linux系統中的socket程序調用select()函數,則該套接字自動設置為非阻塞方式,從而提高了程序的執行效率。經測試,通信兩端的進程能夠通過各自的套接字收發消息,從而實現了Windows與Linux平臺間的通信。
關鍵詞: 套接字;跨平臺網絡通信;客戶機/服務器;select()函數

    在工業生產中,人們常把穩定性高的Linux系統運用到工業控制領域,以此來提高控制系統的性能?;赪indows平臺開發的軟件使用方便,因此工程中的應用軟件大多數是以Windows為平臺開發的。在一個工業系統中,人們需要同時使用Windows和Linux兩種操作系統。為了使兩個不同的操作系統能夠協同工作并互相傳遞消息,需要在兩者間進行通信。
    在日常工作中,Windows作為PC機的操作平臺被廣泛使用,而Linux也以其開放的優勢逐漸被用戶采用。在兩種系統被普遍使用的前提下,如何實現資源共享就成了一個重要的研究課題,需要實現兩個平臺間的互相通信以達到資源共享的目的。
    基于以上兩點,實現Windows與Linux平臺間的網絡通信有著重要的研究意義。本文通過socket(套接字)編程實現兩個系統間的通信,socket是對應TCP/IP協議的最典型的應用開發接口,它提供了不同主機間進程通信的端點。本文闡述了套接字的編程原理,并舉例說明如何開發Linux和Windows系統之間的網絡通信程序。
1 socket基本原理
1.1 基本socket函數[1]

    socket通信涉及的基本函數有:
    (1)創建套接字
    sockfd=socket(domain, type, protocol);參數domain指定socket地址簇類型,type為套接字類型,protocol指明socket請求的協議,sockfd為套接字返回的文件描述符。
    (2)綁定套接字與本地地址信息
    bind(sockfd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));該函數將本地主機地址以及端口號與所創建的套接字綁定起來。
    (3)監聽連接
    listen(sockfd,backlog);此函數表示服務器愿意接收連接,backlog指隊列中允許的最大排隊請求的個數。
    (4)建立連接
    connect(sockfd,(struct sockaddr*) &server_addr,sizeof(struct sockaddr));connect用于建立連接,server_addr是保存著服務器IP地址和端口號的數據結構struct sockaddr。
    (5)接收連接請求
    accept(sockfd,(struct sockaddr*) &client_addr,sizeof(struct sockaddr));用于接收客戶機發來的連接請求。
    (6)發送數據
    send(sockfd,msg,len,flags);將len字節的數據msg發送出去,flags通常為0。
    (7)接收數據
    recv(sockfd,buf,len,flags);從套接字緩沖區buf中讀取len字節長度的數據。
    (8)關閉套接字
    close(sockfd);用于關閉套接字連接。
1.2 socket通信過程
    套接字編程采用客戶機/服務器(C/S)[2]模式,連接成功后,雙方可以進行通信。通信過程如圖1所示。

2 軟件設計
    為避免使用兩臺計算機的麻煩,在Windows7系統的PC上安裝虛擬機,虛擬機的操作系統是Linux。這樣就可以在一臺PC上進行通信測試,主機為Windows平臺,虛擬機為Linux平臺。
    整個系統采用客戶機/服務器(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()來監聽客戶機端的連接請求并與之連接。
2.1.2 select函數[4]的使用
    select可以完成非阻塞操作,即進程執行此函數時不必等待事件發生。它能夠監視select返回的文件描述符的變化情況,通過返回值來判斷select函數的執行情況。
    首先定義一個集合變量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,則繼續等待;若retval為正值,則文件可讀寫,可以執行接下來的發送和接收消息的操作。
2.1.3 發送與接收消息
    if(FD_ISSET(0,&rfds))用來檢查指定文件描述符0是否在該集合rfds中,若滿足則執行發送操作。fgets(buf,MAXBUF,stdin)表示將鍵盤輸入的至多MAXBUF個字符的stdin送到buf中,摁下“Enter”鍵后即可發送。
    同理,對于是否接收消息通過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系統中,使用C#語言來編寫socket程序。打開Microsoft Visual Studio 2010,新建一個“Windows窗體應用程序”的項目。在窗體中添加兩個button控件,分別為button1(連接)和button2(發送)。并添加4個textBox控件,分別為textBox1(消息顯示框)、textBox2(消息輸入框)、textBox3(服務器IP地址輸入框)和textBox4(服務器端口號輸入框)。
2.2.1 請求連接
    新建socket,Server和nPort分別表示服務器IP地址和端口號,通過命令socket.Connect(ServerIP,nPort)來連接服務器。
2.2.2 發送與接收消息

 


    定義發送的字符串為Message,將消息輸入框textBox2中的內容指定為Message。通過發送命令socket.Send(System.Text.Encoding.Default.GetBytes(Message))進行消息發送。
    新建一個byte數組byte[] RecvBuffer,通過socket.Receive(RecvBuffer)將接收到的內容存放到RecvBuffer中。接收成功后,將接收到的內容顯示在消息顯示框中。
3 運行結果與分析
3.1 編譯并執行Linux端程序

    gcc server_socket.c-o server_scoket
    ./server_socket 3352 Server
    此時,服務器端程序準備就緒,等待客戶端請求連接。
3.2 啟動Windows端的連接
    打開Microsoft Visual Studio 2010軟件,點擊“啟動調試”鍵后彈出窗體界面。點擊窗體界面中的“連接”鍵后,客戶機端能夠成功連接服務器端。
3.3 實現互相通信
    連接成功后,服務器端和客戶機端可以自由發送消息。如圖2所示,Windows系統中,在窗體界面的“消息輸入框”中輸入消息,點擊“發送”后即可發送。在Linux終端中,輸入要發送的消息,點擊“Enter”鍵后進行發送。如圖3所示。

3.4 結果分析
    結果表明,服務器端和客戶機端在成功連接后能夠進行通信。在Linux系統中,通信結果在終端顯示。在Windows系統中,通信結果在窗體界面中顯示。經測試,兩個平臺間能夠完成無數次的收發操作。若要結束通信,在Linux終端中鍵入“quit”,即斷開連接。
    本文闡述了Windows與Linux系統的網絡傳輸設計方法,雙方采用TCP/IP協議,運用socket 接口來開發網絡通信程序。Windows平臺利用C#編寫socket程序,并通過窗體界面顯示通信過程。Linux平臺中的socket程序調用select函數,實現非阻塞操作。套接字使得連接在通信兩端的進程,能夠通過各自的套接字收發消息,從而實現了兩個平臺間的全雙工通信。目前的通信程序只能傳送字符串,要真正實現兩個系統之間的資源共享與消息傳遞,還需要它們之間能夠傳送文件、照片及視頻等大數據量的信息,這將是下一階段的研究重點。
參考文獻
[1] 王遠洋,周淵平,郭煥麗.Linux下基于socket多線程并發通信的實現[J].微計算機信息,2009,25(5-3):70-72.
[2] 盧寧,李定主,姚暉.Linux和Windows系統之間網絡通信程序的開發[J].電腦開發與應用,2002,15(3):23-24.
[3] 郭勇.利用Socket開發客戶/服務器應用[J].廣西師范大學學報(自然科學版),2000,18(1):24-27.
[4] 陳榮軍,謝舜道,譚洪舟,等.一種基于Select函數的嵌入式網絡通信信息轉發機制設計[J].電腦知識與技術,2013,9(1):25-28.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          1000部精品久久久久久久久| 欧美人与禽猛交乱配视频| 乱中年女人伦av一区二区| 亚洲美女av黄| 亚洲一二三区在线观看| 国产日韩高清一区二区三区在线| 欧美国产视频在线观看| 欧美中文字幕在线播放| 91久久精品一区| 久久综合色88| 欧美三级日本三级少妇99| 欧美一级在线亚洲天堂| 国产综合色在线视频区| 日韩视频一区二区三区在线播放免费观看| 午夜亚洲一区| 亚洲精品在线免费观看视频| 精品不卡视频| 国产精品视频免费| 欧美在线网站| 欧美成人精品不卡视频在线观看| 久久免费午夜影院| 久久久人成影片一区二区三区观看| 国产日韩在线一区二区三区| 欧美精品一区二区三区视频| 狂野欧美性猛交xxxx巴西| 国产精品扒开腿做爽爽爽视频| 亚洲一区二区三| 亚洲欧美国产不卡| 久久青青草综合| 国产一区二区电影在线观看| 欧美精品一区二区蜜臀亚洲| 国产亚洲人成网站在线观看| 午夜精品久久久久影视| 欧美日产一区二区三区在线观看| 国产精品综合久久久| 久久精品一区蜜桃臀影院| 一区二区三区日韩欧美精品| 国产日韩欧美中文| 国产最新精品精品你懂的| 欧美日韩精品国产| 亚洲黄色三级| 亚洲欧美日本国产专区一区| 国内精品久久久| 亚洲精品日韩激情在线电影| 国产一区二区日韩| 亚洲在线一区二区三区| 欧美在线观看视频一区二区| 国产午夜精品理论片a级探花| 国产亚洲福利一区| 国产一区二区三区四区| 免费观看不卡av| 99精品热视频只有精品10| 国产亚洲一区精品| 欧美日本不卡| 国产精品久久久久久久一区探花| 国产精品一区二区三区免费观看| 久久精品视频在线| 亚洲精品之草原avav久久| 欧美一区二区免费| 欧美大片第1页| 欧美在线精品免播放器视频| 一区二区欧美日韩| 亚洲欧美日韩精品综合在线观看| 久久精品国产成人| 亚洲人屁股眼子交8| 久久亚洲私人国产精品va| 99re6这里只有精品视频在线观看| 欧美日本在线播放| 国产偷自视频区视频一区二区| 国产精品女人久久久久久| 久久www成人_看片免费不卡| 狠狠操狠狠色综合网| 欧美gay视频激情| 亚洲一区bb| 日韩视频精品在线| 国产精品你懂的在线| 欧美性jizz18性欧美| 蜜桃av噜噜一区二区三区| 精品96久久久久久中文字幕无| 这里只有精品在线播放| 亚洲视频观看| 欧美日韩黄色一区二区| 亚洲免费一区二区| 久久综合久久综合这里只有精品| 欧美破处大片在线视频| 久久精品一区二区国产| 欧美午夜不卡影院在线观看完整版免费| 亚洲国产成人精品久久| 亚洲欧洲精品天堂一级| 国产精品a久久久久| 亚洲欧美一区二区三区在线| 国产精品久久国产精品99gif| 亚洲精品九九| 久久人人爽人人爽爽久久| 亚洲视频欧美在线| 欧美午夜理伦三级在线观看| 亚洲免费影视第一页| 午夜免费电影一区在线观看| 久久精品一区二区国产| 欧美激情综合五月色丁香| 国产日产欧美a一级在线| 午夜欧美大尺度福利影院在线看| 国产精品初高中精品久久| 国产精品成人播放| 久久久精品tv| 国精产品99永久一区一区| 欧美精品综合| 国产一区二区日韩| 亚洲精品免费网站| 国模精品一区二区三区| 黄色日韩网站视频| 国产精品五区| 亚洲黄色有码视频| 欧美激情一区二区三区在线视频观看| 欧美日韩精品一本二本三本| 国产在线精品二区| 91久久精品网| 亚洲国产成人porn| 亚洲免费观看在线视频| 亚洲私人黄色宅男| 亚洲午夜精品久久久久久浪潮| 亚洲精品欧美在线| 欧美搞黄网站| 日韩亚洲一区二区| 另类av一区二区| 亚洲经典三级| 日韩午夜在线| 99天天综合性| 午夜视黄欧洲亚洲| 亚洲欧美日本伦理| 国产精品久久久久国产精品日日| 免费人成网站在线观看欧美高清| 欧美激情在线| 欧美日韩八区| 亚洲午夜精品久久久久久app| 亚洲愉拍自拍另类高清精品| 久久久久国产精品一区三寸| 亚洲欧洲日本专区| 久久综合久久综合九色| 欧美在线国产| 国产精品久久久久久久免费软件| 国产精品一区二区三区乱码| 国产精品盗摄一区二区三区| 香蕉亚洲视频| 在线一区二区日韩| 欧美日韩一区综合| 国产伦精品一区二区三区视频孕妇| 亚洲精品在线免费| 国产精品日韩二区| av成人毛片| 在线观看一区二区精品视频| 欧美日韩高清一区| 欧美精品一区二区三区在线看午夜| 欧美a一区二区| 一区在线观看| 欧美亚洲网站| 欧美日韩大片| 国产一区二区三区四区老人| 韩国av一区二区三区在线观看| 欧美一区日本一区韩国一区| 99国产精品| 欧美一区二区久久久| 国产亚洲免费的视频看| 欧美精品v日韩精品v国产精品| 亚洲女人小视频在线观看| 亚洲第一区在线观看| 国产丝袜一区二区三区| 久久综合色婷婷| 精品99一区二区三区| 欧美va亚洲va日韩∨a综合色| aaa亚洲精品一二三区| 亚洲毛片在线观看.| 亚洲综合色丁香婷婷六月图片| 欧美不卡视频一区| 欧美裸体一区二区三区| 国产欧美一区二区三区国产幕精品| 久久精品国产久精国产思思| 国语自产精品视频在线看一大j8| 欧美日韩国产综合视频在线| 欧美成人黄色小视频| 国产亚洲欧美在线| 99re热这里只有精品免费视频| 欧美阿v一级看视频| 欧美性大战久久久久久久蜜臀| 欧美一区免费| 亚洲国产精品一区二区第一页| 欧美日韩视频在线观看一区二区三区| 国产精品亚洲а∨天堂免在线| 国产精品yjizz| 欧美大片一区| 国产欧美日韩精品a在线观看| 国产区欧美区日韩区| 国产精品成人aaaaa网站| 你懂的国产精品永久在线| 久久亚洲精选| 欧美精品一区二区三区蜜臀| 美女精品自拍一二三四| 国产精品毛片a∨一区二区三区|国| 久久久国产一区二区| 欧美多人爱爱视频网站| 欧美日韩另类在线| 亚洲精品影视在线观看| 欧美午夜精品久久久久久浪潮| 亚洲国产精品成人一区二区| 欧美丰满少妇xxxbbb| 久久精品国产久精国产一老狼| 亚洲国产精品va| 久久免费视频网站| 国产精品草莓在线免费观看| 一本色道久久综合亚洲精品不卡| 一区二区三区回区在观看免费视频| 亚洲欧美欧美一区二区三区| 国产日韩欧美中文| 欧美成人日本| 欧美精品自拍偷拍动漫精品| 欧美日本三区| 精品动漫一区二区| 性欧美18~19sex高清播放| 亚洲欧洲精品成人久久奇米网| 亚洲欧美三级伦理| 99国产欧美久久久精品| 午夜在线不卡| 亚洲第一级黄色片| 一本久道久久综合中文字幕| 国内精品**久久毛片app| 欧美日韩国产成人精品| 你懂的视频一区二区| 午夜精品久久久久久久久| 国产精品v亚洲精品v日韩精品| 欧美日韩一区综合| 欧美调教vk| 免费短视频成人日韩| 免费成人黄色片| 欧美91福利在线观看| 麻豆亚洲精品| 国产精品日韩欧美| 亚洲精品123区| 国产精品igao视频网网址不卡日韩| 久久精品国产69国产精品亚洲| 国产精品高清在线| 欧美三级免费| 欧美三级第一页| 国产精品爱啪在线线免费观看| 欧美日韩在线一区二区三区| 久久一区二区三区国产精品| 老鸭窝亚洲一区二区三区| 欧美 日韩 国产一区二区在线视频| 久久一区二区视频| 久久天堂精品| 亚洲国产精选| 欧美性猛交99久久久久99按摩| 欧美成人免费在线视频| 欧美精品免费在线观看| 亚洲第一页在线| 亚洲永久精品大片| 国产日韩一区二区三区在线播放| 久久婷婷人人澡人人喊人人爽| 午夜在线观看免费一区| 欧美视频一区二区三区四区| 国产精品99免视看9| 亚洲狼人精品一区二区三区| 亚洲一区二区三区四区视频| 国产精品一区二区三区观看| 欧美视频免费| 欧美精品高清视频| 亚洲成人在线观看视频| 中文国产成人精品| 欧美精品久久久久久久免费观看| 欧美日精品一区视频| 国产精品久久久久久久午夜| 久久av最新网址| 伊人久久综合97精品| 另类专区欧美制服同性| 欧美xxxx在线观看| 免费黄网站欧美| 狠狠色综合播放一区二区| 亚洲福利免费| 免费观看欧美在线视频的网站| 欧美成人午夜激情在线| 国产精品一级在线| 欧美午夜视频网站| 国产欧美一区二区三区久久| 欧美日韩一级视频| 欧美三区在线观看| 99pao成人国产永久免费视频| 欧美一级久久久久久久大片| 一区二区三区亚洲| 99精品视频一区| 久热精品视频在线观看一区| 亚洲自拍三区| 欧美日韩免费在线视频| 最新国产乱人伦偷精品免费网站| 一本色道久久综合亚洲91| 欧美成人伊人久久综合网| 蜜桃av噜噜一区| 午夜欧美电影在线观看| 看欧美日韩国产| 最近中文字幕mv在线一区二区三区四区| 亚洲精品五月天| 国产免费观看久久| 亚洲在线免费视频| 久久综合色8888| 一本色道久久综合亚洲精品按摩| 欧美精品一区二区三区视频| 99在线观看免费视频精品观看| 国产欧美精品日韩区二区麻豆天美| 欧美国产一区二区三区激情无套| 国产一区91| 久久精品国产99| 亚洲国产岛国毛片在线| 亚洲欧美精品在线观看| 久久久国产一区二区| 久久久综合激的五月天| 国产精品久久久久国产精品日日| 99re6热在线精品视频播放速度| 亚洲一区二区三区四区五区午夜| 国产精品一区二区久激情瑜伽| 夜夜嗨av色一区二区不卡| 久久综合成人精品亚洲另类欧美| 欧美精品日韩一本| 国产欧美视频在线观看| 亚洲电影在线| 99这里只有精品| 欧美在线国产精品| 国产精品久久国产精麻豆99网站| 久久久久久亚洲精品不卡4k岛国| 一本一本久久a久久精品综合妖精| 久久久久久久尹人综合网亚洲|