C# WPF 基于Socket的企業聊天軟件IM(源碼)
兩年前的一個設計,找資料時扒了出來,打開看了一下源碼,那個時候的設計真是無框架無模式的設計,但對像QQ這樣的聊天軟件無疑是一個了解和值得參考的實例,所以大牛請繞過,在此跟大家分享一下,希望對正在學習Socket的童鞋們有點幫助,歡迎大家來拍磚,上圖:

簡介:
1.軟件采用C/S模式,服務器基于.NET控制臺應用程序,客戶端基于.NET WPF,數據庫采用SQL Server
2.在通信上采用TCP協議進行信息傳遞,以服務器轉發方式通信,用戶注冊及密碼管理基于B/S(ASP.NET)
3.主要完成了用戶注冊、用戶密碼修改、添加好友、刪除好友;文字信息轉發(支持字體)、抖動窗體、發送圖片(支持GIF,但有嚴重問題)
服務器流程圖: 客戶端流程圖:


實現:
1.發送文字
采用服務器轉發方式發送,首先把消息通過相應的協議包裝發送到服務器端,再由服務器端轉發到指定的客戶端,協議如下:
| 接收號碼 | 字體消息頭#Font | 字體樣式(包括顏色,大小,樣式等等) | 消息內容 |
服務器端接收到后按好友號碼查找服務器端用戶列表(如圖服務器工作流程)獲取Socket實例如果此好友在線就將信息發送過去
接收方接收到信息以后拆分數據,設置字體,顯示消息內容。
2.發送圖片
此模式有嚴重的問題,由于工作時間一直沒有對其更新過,如果大家有興趣可以自行修改,最好不要使用服務器轉發模式,而是直接對客戶端建立P2P連接。
也是采用服務器轉發方式(我知道有過經驗的人看到以此方式發送圖片一定要拍我了),協議如下:
| 接收號碼 | 圖片消息頭#PIC | 圖片尺寸 |
如何實現在此就不講了,就是一雞肋。
3.發送拌動窗體
抖動窗體實現很簡單,按一定規律改變窗體的位置即可,協議如下:
| 消息頭 | 接收號碼 |
服務器接收到此消息以后獲取消息頭,查找用戶列表獲取Socket實例,如果此好友在線就將信息發送過去
接收端接到此消息,即執行窗體抖動操作,代碼如下:
/// <summary>
/// 執行抖動窗體
/// </summary>
/// <param name="talkWindow"></param>
public static void ShakeWindow(Win_Talking talkWindow)
{
if (talkWindow.WindowState == WindowState.Minimized)
{
talkWindow.WindowState = WindowState.Normal;
}
int shake = 0;
double OriginalLeft = talkWindow.Left;
double OriginalTop = talkWindow.Top;
double newLeftOne = OriginalLeft - 2; double newLeftTwo = OriginalLeft + 2;
double newTopOne = OriginalTop - 2; double newTopTwo = OriginalTop + 2;
shakePlay.Play();
while (shake < 5)
{
talkWindow.Left = newLeftOne; talkWindow.Top = newTopOne;
Thread.Sleep(50);
talkWindow.Left = newLeftTwo; talkWindow.Top = newTopTwo;
Thread.Sleep(50);
shake++;
}
talkWindow.Left = OriginalLeft;
talkWindow.Top = OriginalTop;
}
效果圖如下:

4.添加好友
協議如下:
| 消息頭 | 要添加好友號碼 |
服務器接收到此消息以后,查找號碼如果存在將好友添加至好友列表,并返回給用戶添加成功的消息。
如果添加自己為好友或者好友已存在 ,則返回失敗信息,如圖:

5.刪除好友
協議方式與添加好友相同,服務器接收到此消息以后會從發送此消息的用戶好友列表中刪除要刪除的號碼,并返回操作消息。
6.注冊和用戶密碼操作
注冊采用B/S模式,語言采用VB.NET,大家一定很奇怪,因為之前做過一個類似的項目用的是VB.NET語言,比較懶所以就直接拿來用了,怎樣實現在此就不做多闡述,就是很簡單的WEB制作,后面會講到如何配置,直接上圖:
注冊:

密碼找回:

如何配置:
源碼當中包括兩個文件夾:Server和Client,注冊網站和數據庫包含在Server文件夾下,目錄結構如下:
注冊頁面:IM\Server\WebChat
數據庫:IM\Server\Data
1.數據庫配置
使用SQL Server 2005以上版本直接附加即可,要保證能通過系統Windows 身份驗證登陸,因為服務器是以這種方式連接數據庫的,數據庫設計的特別爛該拍磚的盡情的拍吧
2.注冊網站配置
將webchat添加到IIS管理器,并配置本地IP地址,因為在登陸窗體有一個注冊新號碼,是以服務器IP地址訪問網站的
數據庫連接在IM\Server\WebChat\App_Code\ConnectionData.vb中修改
3.客戶端配置
服務器運行時會顯示所監聽IP的地址,在客戶端有一個IpAddress.xml配置文件,在目錄:
IM\Client\Client\bin\Debug\Config\IpAddress.xml
打開以后更改為運行在服務器的IP地址即可。
附:

浙公網安備 33010602011771號