一区二区国产高清视频在线_真人性做爰A片免费_强伦人妻BD在线电影_亚洲熟妇无码AV_免费人成视频在线观看网站_亚洲欧美精品午睡沙发_在线观看无码的免费网站_中文字幕无码A片久久_日韩欧美国产一区精品_久久精品女人天堂av

重慶醫(yī)科大學論壇

標題: 如何實現點對點通信 [打印本頁]

作者: 重新來過    時間: 2006-4-16 11:17
標題: 如何實現點對點通信
QQ聊天大家多不陌生,但是它是如何實現的呢??
實現方式有多種在這里不一一列舉出來
軟件平臺---VC6.0或者VC7.0
一:基本原理
所謂點對點通信就是在各客戶端創(chuàng)建一個所謂的 “點”,就是我們常說的SOCKET
通過SOCKET來實現通信,不過這種方式缺點是只能實現簡單文本信息的傳送
二:實現過程原理
   (一) 服務端創(chuàng)建
   注意很多書上把SERVER 翻譯為服務器這是不對的
   創(chuàng)建SOCKET
      創(chuàng)建SOCKADDR結構(在這個結構里存放本機的IP地址等)
   邦定BIND
      將邦定后的SOCKET設置為偵聽覺狀態(tài) listen
      接受客戶端的----連接請求 accept
     當然作為服務端我們不可能只和一個客戶端通信,那我們用一個數組來存放接受后的套接字
   SOCKET sockMsg[MAX_CONNECTION_NUM];
      sockMsg =  accept();//參數略
   這是我們就可以利用套接字sockMsg和客戶端進行通信了
   上面所說比較籠統,但是大致的框架已經出來了,至于這些函數怎么用,我就不多說,
各位自己去查幫助文檔(就是MSDN)
    各位切忌 在進行網絡通信之前我們應該代開網絡設備 利用函數WSAStart 函數
   (二):客戶端
    客戶端的創(chuàng)建比較簡單
    用過QQ得人,可以下載最新的QQ版本,就會發(fā)現在設置里面有這本一項 服務器的選擇(具體名稱不記得,反正肯定有這項),這個有什么用呢????
    在創(chuàng)建客戶端的時候我們不用像服務端那么麻煩
    首先創(chuàng)建一個空SOCKET(就是未邦定且為處于listen狀態(tài) )
        然后就是 connect   但是必須有服務端的ip 不然我們就無法進行連接
    完成這些后我們就可以進行和服務段的通信
三 具體實現過程
   (一) 端創(chuàng)建
    首先弄清概念服務端不是服務器,客戶端不是客戶機
    在每個客戶端 我們 既是 服務端也是客戶端
    所謂上面介紹的兩個端我們必須多得建立,應為我們不可能只是等待別人來主動和我們進行連接或者是
我們主動去和別人連接不接受別人發(fā)過來的連接請求
    其次我們要考慮的是程序是順序運行的,一段代碼不可能反復運行(不要在這個問題上和我爭論)
比如我們listen 并 accept  或 connect .這些職能執(zhí)行一次 也就是進行一個 連接,如何來控制讓程序時刻
的處于這種狀態(tài),如果我們用無線循環(huán)來做,那么我們將無法對程序進行其他的操作。怎么辦??
    聰明的你一定會想到開線程來做
現在就怎么開線程以及開那些線程
    仔細分析一下我們會發(fā)現以下幾種狀態(tài),必須時刻保持
    listen 并 accept   ,recv,
        做法
    listen和accept必須放在一個線程里面做
    recv單獨開革線程
由于代碼篇幅較大,在上面我只是簡單的說了框架結構和原理。這里不知道可不可以直接插入word文檔,如果刻意的話,我們將我的代碼共享給大家的。實在是不好意思
    我不想別人問我什么函數該怎么用,因為這些在幫助文檔里面有。如果有具體細節(jié)不明白 ,偶還是可以說說的
作者: naughtyhui    時間: 2006-4-24 17:49
字體沒設好,看起來 吃力。




歡迎光臨 重慶醫(yī)科大學論壇 (http://www.espacio12.com/) Powered by Discuz! X3.4