程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> VC++ >> 基於TCP/IP的局域網多用戶通信(1)

基於TCP/IP的局域網多用戶通信(1)

編輯:VC++

作者:袁 淵(華東船舶工業學院機械系)
轉載請與作者聯系

摘要:基於TCP/IP的網絡通信技術實現了面向連接的用戶與服務器間點對點異步通信,本文在該基礎上應用了多線程以及共享數據結構技術,使網絡服務器具有了多用戶間數據轉發的功能,進而解決了局域網多用戶間的通信問題。

關鍵詞:TCP/IP;多線程;共享;通信;網絡

引言

  由於因特網的迅速流行,越來越多的應用程序具備了在網上與其它程序通信的能力。從WIN95開始微軟把網絡功能融進了它的操作系統,使得應用程序網絡通信能力更為普及。因此,微軟的TCP/IP協議也就成為網絡應用程序基於的首選協議。

  一般采用TCP/IP協議的應用程序只實現了單用戶與服務器間點對點的連接,而本文在VC6.0的環境下,運用了了多線程以及共享數據結構技術,不僅實現了多用戶與服務器間的連接,而且解決了多用戶間信息互發問題----依靠服務器的轉發功能。通過本文的闡述,希望能對那些需要編寫多用戶網絡通信程序的讀者以啟發。

一、技術概述

1.1 基於TCP/IP的通信技術

  基於TCP/IP的通信基本上都是利用SOCKET套接字進行數據通訊,程序一般分為服務器端和用戶端兩部分。下面簡要地講一下設計思路(VC6.0下):

第一部分 服務器端

  一、創建服務器套接字(create)。
  二、服務器套接字進行信息綁定(bind),並開始監聽連接(listen)。
  三、接受來自用戶端的連接請求(accept)。
  四、開始數據傳輸(send/receive)。
  五、關閉套接字(closesocket)。

第二部分 用戶端

  一、創建用戶套接字(create)。
  二、與遠程服務器進行連接(connect),如被接受則創建接收進程。
  三、開始數據傳輸(send/receive)。
  四、關閉套接字(closesocket)。

  通過以上設計思路,我們可以創建一個簡單的面向連接的單用戶程序。下面,將介紹多線程技術,以使程序支持多用戶。

1.2 多線程技術

  我們可以把線程看成是一個進程(執行程序)中的一個執行點,每個進程在任何給定時刻可能有若干個線程在運行。一個進程中的所有線程共享該進程中同樣的地址空間,同樣的數據和代碼,以及同樣的資源。進程中每個線程都有自己獨立的棧空間,和其它線程分離,並且不可互相訪問。每個線程在本進程所占的CPU時間內,要麼以時間片輪換方式,要麼以優先級方式運行。如果以時間片輪換方式運行,則每個線程獲得同樣的時間量;如果以優先級方式運行,則優先級高的線程將得到較多的時間量,而優先級低的線程只能得到較少的時間量。方式的選擇主要取決於系統時間調度器的機制以及程序的實時性要求。

  現在,運用多線程技術就可以實現對多用戶的支持。即在服務器端,使接收來自用戶端的連接請求(accept)這步無限循環,每接收一個用戶請求,產生兩個線程(send和receive線程),用來管理服務器與該用戶的通信任務。下面,運用共享數據結構技術,就可以實現本問所要解決的關鍵技術---服務器轉發技術。

1.3 共享數據結構技術

  同一進程中的多個線程共存於單一的線性地址空間,因此,在多線程間共享數據結構是非常容易且方便的。但必須注意的是,對數據結構的訪問必須是多線程互斥的,否則數據任意更改將導致不可預料的結果。本文所闡述的服務器轉發技術也就是通過共享數據結構實現線程間的互相通信。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved