資源簡(jiǎn)介
c#基于TCP協(xié)議的Socket通信完整實(shí)例(實(shí)現(xiàn)多人聊天室),通過(guò)C#winform實(shí)現(xiàn)多人聊天,同時(shí)服務(wù)器可以向指定客戶端發(fā)送消息。非常實(shí)用哦!

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Linq;
using?System.Text;
using?System.Windows.Forms;
using?System.Net;
using?System.Net.Sockets;
namespace?Client
{
????public?partial?class?MainForm?:?Form
????{
????????private?IPEndPoint?ServerInfo;
????????private?Socket?ClientSocket;
????????//信息接收緩存
????????private?Byte[]?MsgBuffer;
????????//信息發(fā)送存儲(chǔ)
????????private?Byte[]?MsgSend;
????????public?MainForm()
????????{
????????????InitializeComponent();
????????}
????????private?void?MainForm_Load(object?sender?EventArgs?e)
????????{
????????????//this.CmdSend.Enabled?=?false;
????????????//this.CmdExit.Enabled?=?false;
????????????//定義一個(gè)IPV4,TCP模式的Socket
????????????ClientSocket?=?new?Socket(AddressFamily.InterNetwork?SocketType.Stream?ProtocolType.Tcp);
????????????MsgBuffer?=?new?Byte[65535];
????????????MsgSend?=?new?Byte[65535];
????????????//允許子線程刷新數(shù)據(jù)
????????????CheckForIllegalCrossThreadCalls?=?false;
????????????UserName.Text?=?Environment.MachineName;
????????????ServerIP.Text?=?“127.0.0.1“;
????????}
????????private?void?CmdEnter_Click(object?sender?EventArgs?e)
????????{
????????????//服務(wù)端IP和端口信息設(shè)定這里的IP可以是127.0.0.1,可以是本機(jī)局域網(wǎng)IP,也可以是本機(jī)網(wǎng)絡(luò)IP
????????????ServerInfo?=?new?IPEndPoint(IPAddress.Parse(this.ServerIP.Text)?Convert.ToInt32(8008));
????????????try
????????????{
????????????????//客戶端連接服務(wù)端指定IP端口,Sockket
????????????????ClientSocket.Connect(ServerInfo);
????????????????//將用戶登錄信息發(fā)送至服務(wù)器,由此可以讓其他客戶端獲知
????????????????ClientSocket.Send(Encoding.Unicode.GetBytes(“用戶:?“?+?this.UserName.Text?+?“?進(jìn)入系統(tǒng)!“));
????????????????//開(kāi)始從連接的Socket異步讀取數(shù)據(jù)。接收來(lái)自服務(wù)器,其他客戶端轉(zhuǎn)發(fā)來(lái)的信息
????????????????//AsyncCallback引用在異步操作完成時(shí)調(diào)用的回調(diào)方法
????????????????ClientSocket.BeginReceive(MsgBuffer?0?MsgBuffer.Length?SocketFlags.None?new?AsyncCallback(ReceiveCallBack)?null);
????????????????this.SysMsg.Text?=?“登錄服務(wù)器成功!“;
????????????????this.CmdSend.Enabled?=?true;
????????????????this.CmdEnter.Enabled?=?false;
????????????????this.CmdExit.Enabled?=?true;
????????????}
????????????catch
????????????{
????????????????MessageBox.Show(“登錄服務(wù)器失敗,請(qǐng)確認(rèn)服務(wù)器是否正常工作!“);
????????????}
????????}
????????private?void?ReceiveCallBack(IAsyncResult?AR)
????????{
????????????try
????????????{
????????????????//結(jié)束掛起的異步讀取,返回接收到的字節(jié)數(shù)。?AR,它存儲(chǔ)此異步操作的狀態(tài)信息以及所有用戶定義數(shù)據(jù)
????????????????int?REnd?=?ClientSocket.EndReceive(AR);
????????????????lock?(this.RecieveMsg)
????????????????{
????????????????????this.RecieveMsg.AppendText(Encoding.Unicode.GetString(MsgBuffer?0?REnd)?+?“\n“);
????????????????}
????????????????ClientSocket.BeginReceive(MsgBuffer?0?MsgBuffer.Length?0?new?AsyncCallback(ReceiveCallBack)?null);
????????????}
????????????catch
????????????{
????????????????MessageBox.Show(“已經(jīng)與服務(wù)器斷開(kāi)連接!“);
????????????????this.Close();
????????????}
????????}
????????private?void?CmdExit_Click(object?sender?EventArgs?
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????13824??2011-08-25?10:29??Server\Server\bin\Debug\Server.exe
?????文件??????24064??2011-08-25?10:29??Server\Server\bin\Debug\Server.pdb
?????文件??????11608??2011-08-25?10:30??Server\Server\bin\Debug\Server.vshost.exe
?????文件????????490??2010-03-17?22:39??Server\Server\bin\Debug\Server.vshost.exe.manifest
?????文件???????5658??2011-08-25?10:29??Server\Server\MainForm.cs
?????文件??????11358??2011-08-25?10:19??Server\Server\MainForm.Designer.cs
?????文件???????5817??2011-08-25?10:19??Server\Server\MainForm.resx
?????文件???????5271??2011-08-25?10:29??Server\Server\obj\x86\Debug\DesignTimeResolveAssemblyReferencesInput.cache
?????文件????????360??2011-08-25?10:22??Server\Server\obj\x86\Debug\GenerateResource-ResGen.read.1.tlog
?????文件????????498??2011-08-25?10:22??Server\Server\obj\x86\Debug\GenerateResource-ResGen.write.1.tlog
?????文件????????591??2011-08-25?10:30??Server\Server\obj\x86\Debug\Server.csproj.FileListAbsolute.txt
?????文件??????13824??2011-08-25?10:29??Server\Server\obj\x86\Debug\Server.exe
?????文件????????180??2011-08-25?10:22??Server\Server\obj\x86\Debug\Server.MainForm.resources
?????文件??????24064??2011-08-25?10:29??Server\Server\obj\x86\Debug\Server.pdb
?????文件????????180??2011-08-25?10:10??Server\Server\obj\x86\Debug\Server.Properties.Resources.resources
?????文件????????470??2011-08-24?23:11??Server\Server\Program.cs
?????文件???????1344??2011-08-24?23:11??Server\Server\Properties\AssemblyInfo.cs
?????文件???????2862??2011-08-24?23:11??Server\Server\Properties\Resources.Designer.cs
?????文件???????5612??2011-08-24?23:11??Server\Server\Properties\Resources.resx
?????文件???????1091??2011-08-24?23:11??Server\Server\Properties\Settings.Designer.cs
?????文件????????249??2011-08-24?23:11??Server\Server\Properties\Settings.settings
?????文件???????3434??2011-08-24?23:12??Server\Server\Server.csproj
?????文件????????860??2011-08-24?23:11??Server\Server.sln
????..A..H.?????15872??2011-08-25?10:31??Server\Server.suo
?????文件??????12800??2011-08-25?10:29??Client\Client\bin\Debug\Client.exe
?????文件??????26112??2011-08-25?10:29??Client\Client\bin\Debug\Client.pdb
?????文件??????11600??2011-08-25?10:30??Client\Client\bin\Debug\Client.vshost.exe
?????文件????????490??2010-03-17?22:39??Client\Client\bin\Debug\Client.vshost.exe.manifest
?????文件???????3686??2011-08-12?11:05??Client\Client\Client.csproj
?????文件???????4628??2011-08-25?10:29??Client\Client\MainForm.cs
............此處省略43個(gè)文件信息
- 上一篇:DEM內(nèi)插程序
- 下一篇:C#寫性能服務(wù)器
評(píng)論
共有 條評(píng)論