資源簡介
下載前請先看說明!!
此程序是C# winform 用Socket編寫。包含服務(wù)端和客戶端代碼。
2、服務(wù)端設(shè)定地址為192.168.0.103,端口設(shè)定為5188,客戶端指向服務(wù)端也是這個(gè)地址,根據(jù)需要自行修改。
服務(wù)端:
//監(jiān)聽端口
private int port = 51888;
private TcpListener myListener;
ArrayList MessList = new ArrayList();
int MessCount = 0;
...
...
IPAddress[] addrIP = Dns.GetHostAddresses("192.168.0.103"); //ip地址
localAddress = addrIP[0];
客戶端:
//建立網(wǎng)絡(luò)通訊
try
{
client = new TcpClient("192.168.0.103", 51888); //定義服務(wù)器端ip地址和端口,與服務(wù)器端定義要一致
TcpInfo.AppendText("本機(jī)EndPoint:" client.Client.LocalEndPoint); //本機(jī)的ip地址和端口號(hào)
TcpInfo.AppendText("與服務(wù)器建立連接成功");
linkFlag = true;
}
catch
{
TcpInfo.AppendText("與服務(wù)器連接失敗");
return;
}
3、程序運(yùn)行時(shí)必須首先運(yùn)行“服務(wù)端”的ChatServer.exe,點(diǎn)擊“開始監(jiān)聽”后,再運(yùn)行“客戶端”的可執(zhí)行文件,用戶名隨便起一個(gè),密碼隨便填。服務(wù)端每個(gè)登錄用戶開1個(gè)線程,客戶端開1個(gè)線程進(jìn)行數(shù)據(jù)交互。
4、數(shù)據(jù)傳輸定義:
string[] sArray = getMess.Split(new char[6] { '[', ']', '$', '$', '$', '$' });
//sArray[1] 發(fā)送信息用戶的ip
//sArray[3] 發(fā)送消息的版塊
//sArray[4] 發(fā)送消息的內(nèi)容
//sArray[5] 用戶名
//sArray[6] 時(shí)間
服務(wù)端據(jù)此進(jìn)行消息派發(fā),客戶端根據(jù)返回的消息分類顯示。
5、由于使用繪圖功能,會(huì)產(chǎn)生屏幕的閃爍,所以用生成位圖的方式處理,達(dá)到減小閃爍。可能會(huì)產(chǎn)生信息更新較慢或不連貫,因?yàn)樵谧钣覀?cè)將全部數(shù)據(jù)動(dòng)作寫了一遍。同時(shí),由于在線程上不能對(duì)原組件進(jìn)行添加等操作,所以按照右側(cè)內(nèi)容變化來更新數(shù)據(jù)信息顯示:
private void TcpInfo_TextChanged(object sender, EventArgs e)
{.........}
繪圖處理:
......
Bitmap localBitmap = new Bitmap(conter_panel.Width, conter_panel.Height);
Graphics bitmapGraphics = Graphics.FromImage(localBitmap);
bitmapGraphics.Clear(BackColor);
bitmapGraphics.SmoothingMode = SmoothingMode.AntiAlias;
Draw(conter_panel.ClientRectangle, bitmapGraphics, 18, true, 0, Color.FromArgb(90, 143, 0), Color.FromArgb(90, 143, 0));
conter_panel.BackgroundImage = localBitmap;
conter_panel.Controls.Add(rc);
......
6、程序?yàn)榱藢W(xué)習(xí)方便未使用數(shù)據(jù)庫,所有數(shù)據(jù)交互都放在內(nèi)存中進(jìn)行。
此程序是C# winform 用Socket編寫。包含服務(wù)端和客戶端代碼。
程序界面,我偷懶了,直接把我前面寫的Web頁面的素材圖片照搬過來,包括界面結(jié)構(gòu)都仿照Web那個(gè)程序了。不過winform按照Web風(fēng)格去寫,真tm累。點(diǎn)擊網(wǎng)站上的名字,可以看到前面寫的web程序,以及形成這個(gè)winform程序的學(xué)習(xí)過程。
客戶端:
服務(wù)端:
2、服務(wù)端設(shè)定地址為192.168.0.103,端口設(shè)定為5188,客戶端指向服務(wù)端也是這個(gè)地址,根據(jù)需要自行修改。
服務(wù)端:
//監(jiān)聽端口
private int port = 51888;
private TcpListener myListener;
ArrayList MessList = new ArrayList();
int MessCount = 0;
...
...
IPAddress[] addrIP = Dns.GetHostAddresses("192.168.0.103"); //ip地址
localAddress = addrIP[0];
客戶端:
//建立網(wǎng)絡(luò)通訊
try
{
client = new TcpClient("192.168.0.103", 51888); //定義服務(wù)器端ip地址和端口,與服務(wù)器端定義要一致
TcpInfo.AppendText("本機(jī)EndPoint:" client.Client.LocalEndPoint); //本機(jī)的ip地址和端口號(hào)
TcpInfo.AppendText("與服務(wù)器建立連接成功");
linkFlag = true;
}
catch
{
TcpInfo.AppendText("與服務(wù)器連接失敗");
return;
}
3、程序運(yùn)行時(shí)必須首先運(yùn)行“服務(wù)端”的ChatServer.exe,點(diǎn)擊“開始監(jiān)聽”后,再運(yùn)行“客戶端”的可執(zhí)行文件,用戶名隨便起一個(gè),密碼隨便填。服務(wù)端每個(gè)登錄用戶開1個(gè)線程,客戶端開1個(gè)線程進(jìn)行數(shù)據(jù)交互。
4、數(shù)據(jù)傳輸定義:
string[] sArray = getMess.Split(new char[6] { '[', ']', '$', '$', '$', '$' });
//sArray[1] 發(fā)送信息用戶的ip
//sArray[3] 發(fā)送消息的版塊
//sArray[4] 發(fā)送消息的內(nèi)容
//sArray[5] 用戶名
//sArray[6] 時(shí)間
服務(wù)端據(jù)此進(jìn)行消息派發(fā),客戶端根據(jù)返回的消息分類顯示。
5、由于使用繪圖功能,會(huì)產(chǎn)生屏幕的閃爍,所以用生成位圖的方式處理,達(dá)到減小閃爍。可能會(huì)產(chǎn)生信息更新較慢或不連貫,因?yàn)樵谧钣覀?cè)將全部數(shù)據(jù)動(dòng)作寫了一遍。同時(shí),由于在線程上不能對(duì)原組件進(jìn)行添加等操作,所以按照右側(cè)內(nèi)容變化來更新數(shù)據(jù)信息顯示:
private void TcpInfo_TextChanged(object sender, EventArgs e)
{.........}
繪圖處理:
......
Bitmap localBitmap = new Bitmap(conter_panel.Width, conter_panel.Height);
Graphics bitmapGraphics = Graphics.FromImage(localBitmap);
bitmapGraphics.Clear(BackColor);
bitmapGraphics.SmoothingMode = SmoothingMode.AntiAlias;
Draw(conter_panel.ClientRectangle, bitmapGraphics, 18, true, 0, Color.FromArgb(90, 143, 0), Color.FromArgb(90, 143, 0));
conter_panel.BackgroundImage = localBitmap;
conter_panel.Controls.Add(rc);
......
6、程序?yàn)榱藢W(xué)習(xí)方便未使用數(shù)據(jù)庫,所有數(shù)據(jù)交互都放在內(nèi)存中進(jìn)行。
7、程序顯示英文不太正常,中文正常。
代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Linq;
using?System.Runtime.InteropServices;
using?System.Text;
using?System.Windows.Forms;
using?System.Net;
using?System.Net.Sockets;
using?System.Threading;
using?System.IO;
using?System.Drawing.Drawing2D;
using?System.Text.Regularexpressions;
namespace?Thedog
{
????public?partial?class?Form1?:?Form
????{
????????[DllImport(“Gdi32.dll“?EntryPoint?=?“CreateRoundRectRgn“)]
????????private?static?extern?IntPtr?CreateRoundRectRgn
????????????(
????????????????int?nLeftRect
????????????????int?nTopRect
????????????????int?nRightRect
????????????????int?nBottomRect
????????????????int?nWidthEllipse
????????????????int?nHeightEllip
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
????..A..H.?????55296??2016-12-11?00:44??C#?winform?Socket\客戶端\.vs\Thedog\v14\.suo
?????文件????????189??2016-12-02?21:56??C#?winform?Socket\客戶端\App.config
?????文件??????16744??2016-12-04?15:19??C#?winform?Socket\客戶端\bin\Debug\Res\1.png
?????文件??????16951??2016-12-04?15:19??C#?winform?Socket\客戶端\bin\Debug\Res\10.png
?????文件??????17133??2016-12-04?15:24??C#?winform?Socket\客戶端\bin\Debug\Res\11.png
?????文件??????17094??2016-12-04?15:24??C#?winform?Socket\客戶端\bin\Debug\Res\12.png
?????文件??????16944??2016-12-04?15:24??C#?winform?Socket\客戶端\bin\Debug\Res\13.png
?????文件??????16862??2016-12-04?15:24??C#?winform?Socket\客戶端\bin\Debug\Res\14.png
?????文件??????16756??2016-12-04?15:24??C#?winform?Socket\客戶端\bin\Debug\Res\15.png
?????文件??????16898??2016-12-04?15:24??C#?winform?Socket\客戶端\bin\Debug\Res\16.png
?????文件??????16961??2016-12-04?15:23??C#?winform?Socket\客戶端\bin\Debug\Res\17.png
?????文件??????17067??2016-12-04?15:23??C#?winform?Socket\客戶端\bin\Debug\Res\18.png
?????文件??????16748??2016-12-04?15:23??C#?winform?Socket\客戶端\bin\Debug\Res\19.png
?????文件??????16890??2016-12-04?15:20??C#?winform?Socket\客戶端\bin\Debug\Res\2.png
?????文件??????16983??2016-12-04?15:23??C#?winform?Socket\客戶端\bin\Debug\Res\20.png
?????文件??????16895??2016-12-04?15:23??C#?winform?Socket\客戶端\bin\Debug\Res\21.png
?????文件??????17030??2016-12-04?15:23??C#?winform?Socket\客戶端\bin\Debug\Res\22.png
?????文件??????17170??2016-12-04?15:23??C#?winform?Socket\客戶端\bin\Debug\Res\23.png
?????文件??????16994??2016-12-04?15:23??C#?winform?Socket\客戶端\bin\Debug\Res\24.png
?????文件??????17006??2016-12-04?15:22??C#?winform?Socket\客戶端\bin\Debug\Res\25.png
?????文件??????17290??2016-12-04?15:22??C#?winform?Socket\客戶端\bin\Debug\Res\26.png
?????文件??????16844??2016-12-04?15:22??C#?winform?Socket\客戶端\bin\Debug\Res\27.png
?????文件??????17072??2016-12-04?15:22??C#?winform?Socket\客戶端\bin\Debug\Res\28.png
?????文件??????17109??2016-12-04?15:22??C#?winform?Socket\客戶端\bin\Debug\Res\29.png
?????文件??????17057??2016-12-04?15:20??C#?winform?Socket\客戶端\bin\Debug\Res\3.png
?????文件??????17031??2016-12-04?15:22??C#?winform?Socket\客戶端\bin\Debug\Res\30.png
?????文件??????17014??2016-12-04?15:22??C#?winform?Socket\客戶端\bin\Debug\Res\31.png
?????文件??????17077??2016-12-04?15:21??C#?winform?Socket\客戶端\bin\Debug\Res\32.png
?????文件??????16964??2016-12-04?15:21??C#?winform?Socket\客戶端\bin\Debug\Res\33.png
?????文件??????16944??2016-12-04?15:21??C#?winform?Socket\客戶端\bin\Debug\Res\34.png
............此處省略100個(gè)文件信息
評(píng)論
共有 條評(píng)論