全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1491
推到 Plurk!
推到 Facebook!

我想發問關於Soket?

尚未結案
guest_176
一般會員


發表:1
回覆:1
積分:0
註冊:2005-01-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-22 23:53:10 IP:211.76.xxx.xxx 未訂閱
各位前輩你們好: 小弟最近對網路程式感興趣,想寫基本的傳檔程式... 網上找資料時發現這個討論版,有很多文章提供,很有幫助.. 花了幾天時間在閱讀資料,也查過BcbHelp雖然有些還看不懂... 大概知道TServerSoket和TClientSoket的基本使用方法了.... 我有一些問題想要知道,希望各位大大幫忙. 1.OnClientRead事件參數裡面的Socket是Client端傳來的,它與ServerSocket->Socket有何不同呢?可以用ServerSocket->ReciveBuf()嗎?為何不可? 2.關於Port屬性查Help後顯示 For client sockets, Port is the ID of the desired server connection. ClientSocket->Port是用來連到Server的Port,那要如何設定Client 端要用哪個Port去連到Server? 3.ServerSoket or ClientSoket 有methoed查閱本地Ip嗎? 4.Non-Blocking非同步模式,它只有一個程序處理多個Client Connection,而Thread-Blocking同步模式,它會各自安排一個Thread程序去處理對應的Connection,感覺上Thread-Blocking比較有效率但它卻是阻塞方式需要等待函式 處理完後才能返回,請問兩只之間哪種模式會比較有效率?什麼情況下需要使用它們? 5.有沒有Thread-Blocking簡單的範例程式可以提供呢? =========================== 小弟問的發問的問題不一定要全部回答,若有一些蠢問題,敬請見諒。 對於各位大大的協助,感激不盡! ===========================
microbean
初階會員


發表:1
回覆:43
積分:38
註冊:2004-04-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-25 10:57:28 IP:210.58.xxx.xxx 未訂閱
1. 看起來 Socket 被定義了好幾個角色 1.存放所有 connections 2.存放 currently Active Connection 3.可以與 winsock socket 互動的介面 所以如果你不透過 OnClientRead 或者其他 event 拿到 socket class 你可能不知道,那一個 connection 丟資料給你 ,當然就無法回應. 如果不想透過 event 要直接跟 winsock socket 溝通,就要用 ServerSocket.Socket.Connections[0].SendText ..這種語法, 重點在於指定要送給某一個 connection . 可能還有其它更具彈性的用法 .但我覺得上面的概念應該就足夠了. 2. 一般的情形 , 我們是不需要知道 client 端用哪個 port 去連 Server. 所以元件可能都不提供此功能 . 因為就算對方知道你的 client port 也沒有辦法直接透過這個 port 建立 connection 給你 . (因為你不是 server 沒有 listen) 3. 這兩組 class 如果要拿到本地的 ip 都是在連線過程中才能拿到 例如 : LocalAddress 這個屬性 . 如果你只是單純的要拿 ip 應該可以透過 ipHelper 或網卡訊息拿到 , 可以在板上找到相關的文章. 4. WinSock 的習慣分類裡面, 我們會分 Blocking or Non-Blocking 兩種 Blocking 就是指任何動作都是會等待的 , non-blocking 則相反 兩種模式的效能頻估 , 看法各有不同 , 大部分的資料都會指向 non-blocking 的效能較高 , 但是他的開發難度也相對較高. 而這兩個 class 在實作 non-blocking 概念時,並沒有完全發揮 Non-Blocking 的特性, 他只是讓所有的 connection 集中到一個 Thread 去處理 , 事實上 , non-blocking 的實作仍存有相當多的 技巧 , 不一定都是用一個 Thread 去做. Thread-Blocking 為每一個 connection 建立 thread , 看起來很像 很棒 , 但是這相對的代表你用了很多 OS 資源 , 而 thread 的特性 是, 在 createthread 跟 terminatethread 時都比較慢,也就是說 當新的 connection 連進來時 , 會吃掉稍微多一點系統資源, 也會 稍慢一點. 另一個角度想 , 如果你的 server 有 2000 個 user 在連線,以 Thread-Blocking 來看 , 就有 2000 個 thread. windows 要 handle 2000 個 thread .....我有點存疑.. 從小量連線數來看 , Thread-Blocking 是較穩定的模式, 但不敢保證,就是傳輸最佳的模式. 以初學網路程式的人來說 , 我會先建議從 Blocking 開始 慢慢在進入 non-blocking . 5. sorry ..還是請你到網路上查 , 應該可以找到你要的東西. 這個問題,我就不回答了. _= 沒事就 winsock 一下 =_
guest_176
一般會員


發表:1
回覆:1
積分:0
註冊:2005-01-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-27 00:31:18 IP:211.76.xxx.xxx 未訂閱
很謝謝您的回答,使我觀念更加清楚了
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-18 17:33:19 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-05 21:38:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!