⑴ C語言socket編程要怎麼實現伺服器可以發消息給客戶端
先要理解socket是什麼?
簡單的說socket是一個全雙工的通信通道,
即使用TCP或者UDP通信時均可以在發送消息的同時接受消息,
它不區分是否是伺服器。
根據這個概念你的問題就很好回答。
》當客戶端與伺服器連接後。有什麼方法使伺服器可以隨時隨地發消息給客戶端?
》我現在只能。客戶端發個消息給伺服器。伺服器才能發個消息給客戶端。也就是說客戶端不發消息。伺服器就沒法發消息給客戶端。
》求大牛給個思路。當連接後。客戶端與伺服器雙方可以隨時隨地通信!
使用多線程,一個維持接受邏輯,一個維持送信邏輯,即可完成同時接受及發送。
客戶端及伺服器端均做上述設置。
而你的做法是在一個線程中執行接受與送信,因此只能按照順序邏輯完成接收與送信。
關鍵點是多線程。
⑵ 伺服器如何及時通知客戶端
如何實現伺服器向客戶端發出一條通知?
當向伺服器資料庫插入一條數據時,伺服器就向客戶端發出一條信息,讓客戶端及時知道;
如何實現呢?
能描述清楚點嗎?問題太大概了吧。
向客戶發送消息的sendMessage方法是不是已經准備好了?
那接下來就是選擇在程序中100%確定已經向資料庫插入了數據的地方調用sendMessage方法。
簡單的實現可以用js的alert方法。
執行資料庫插入操作,後返回值,js判斷,根據返回的值,如果插入成功,則alert('插入成功')
ejb的攔截器應該能實現,給向資料庫插入數據的這個方法加個攔截器,在這個攔截器類里邊先調用這個方法,然後實現向客戶端發消息
得看你做B/S還是C/S
看不懂說的啥。。
在消息庫里插一條 消息數據。 再查詢出來 不就好了。 這是簡單的方式咯。 復雜點就用推送技術吧
基本上就兩招:
要麼是 短連接下的客戶端發起輪詢 模型;
要麼是 長連接下的伺服器端主動推送 模型。
C/S沒玩過,B/S用過推模式,比輪詢要好的多
我現在用的資料庫連接字元串是private static string conStr = @"Data Source=192.168.1.37,1611;Initial Catalog=QLYM;User ID=sa;Pwd=system";這是區域網的!那連接伺服器資料庫應該什麼寫呢?
當伺服器資料庫數據有更新時,客戶端如何及時知道?客戶端是client的,輪詢會對伺服器有壓力,有什麼技術更好的?
客戶端只設置兩個,每分鍾訪問伺服器一次,這樣伺服器的壓力應該不大吧?
⑶ 用Socket怎麼從伺服器向客戶端發送消息
最好的方法是:每一客戶端用唯一的ID來標示,
就像QQ號一樣,
在客戶端連接伺服器,發送自己的ID,
然後和相應產生的SOCKET進行綁定,
一個客戶端向另一個客戶端發送信息時,要求在數據包里包含對方的ID號。可以定義一個類型下列的數據結構對數據包進行封裝:
type
struct
_sdata
{
int
sourceID;//發送者自己的ID
int
destID;
//接收者的ID
char
datainfo[1];//數據信息
}SDATA,
*PSDATA;