資源簡介
socket 實現聊天
/// <summary> /// 啟動監聽,輪詢監聽客戶機請求并將客戶端套接字存入轉發表 /// </summary> public void StartUp() { IPAddress _ip = Dns.GetHostAddresses(Dns.GetHostName())[2];//可能有多個,此時的IP是本地IP _tcpl = new TcpListener(_ip, _port); _tcpl.Start();//開始偵聽傳入的連接請求。 Console.WriteLine("服務器已啟動,正在監聽...\n"); Console.WriteLine(string.Format("服務器IP:{0}\t端口號:{1}\n", _ip, _port)); while (true) { byte[] packetBuff = new byte[_maxPacket];// 接收數據緩沖區大小64K //AcceptSocket 是一個阻止方法,該方法返回可用于發送和接收數據的 Socket。 //如果希望避免阻止,請使用 Pending 方法來確定傳入連接隊列中的連接請求是否可用。 //返回的 Socket 是使用遠程主機的 IP 地址和端口號初始化的。 //您可以使用 Socket 類中任何可用的 Send 和 Receive 方法與遠程主機進行通信。 //------------使用 Socket 后,請確保調用其 Close 方法。如果應用程序相對簡單,----------- //請考慮使用 AcceptTcpClient 方法代替 AcceptSocket 方法。 //TcpClient 提供了一些通過網絡在阻止同步模式下發送和接收數據的簡單方法。 Socket newClient = _tcpl.AcceptSocket();//本地TcpListener 接受新的請求 //返回的 Socket 是使用遠程主機的 IP 地址和端口號初始化的 newClient.Receive(packetBuff);//將接受的遠程SOCKET,將數據存入接受緩沖區 string userName = Encoding.Unicode.GetString(packetBuff).TrimEnd('\0'); //驗證是否為唯一用戶,有了就發送失敗命令給請求客戶 if (_transmit_tb.Count != 0 && _transmit_tb.ContainsKey(userName)) { newClient.Send(Encoding.Unicode.GetBytes("cmd::Failed")); continue; } else { newClient.Send(Encoding.Unicode.GetBytes("cmd::Successful")); } //將新連接加入轉發表并創建線程為其服務 _transmit_tb.Add(userName, newClient); //----------------------- string svrlog = string.Format("[系統消息]新用戶 {0} 在 {1} 已連接... 當前在線人數: {2}\r\n\r\n", userName, DateTime.Now, _transmit_tb.Count); Console.WriteLine(svrlog); //------------------------ Thread clientThread = new Thread(new ParameterizedThreadStart(ThreadFunc)); clientThread.Start(userName); //向所有客戶機發送系統消息,說有人上線了 foreach (DictionaryEntry de in _transmit_tb) { string _clientName = de.Key as string; Socket _clientSkt = de.Value as Socket; if (!_clientName.Equals(userName)) { _clientSkt.Send(Encoding.Unicode.GetBytes(svrlog)); } } } }
代碼片段和文件信息
using?System;
using?System.Collections;
using?System.Collections.Specialized;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Text;
using?System.Net.Sockets;//++++
using?System.Windows.Forms;
using?System.Threading;//++++
using?System.Runtime.Serialization;//++++
using?System.Runtime.InteropServices;//++++
using?System.IO;
using?System.Runtime.Serialization.Formatters.Binary;//++++
using?System.Media;//+++++
namespace?EasyChat
{
????public?partial?class?chat_frm?:?Form
????{
????????#region?私有字段
????????///?
????????///?當前用戶名
????????///?
????????private?string?_username?=?null;
????????///?
????????///?數據緩沖區大小
????????///?
????????private?int?_maxPacket?=?2048;//2K的緩沖區
????????//
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????183663??2008-11-17?22:56??scoket文檔及實例(含有客戶端和服務器端)+源碼\C#.Net網絡程序開發-Socket篇.pdf
?????文件????1003008??2008-08-23?12:41??scoket文檔及實例(含有客戶端和服務器端)+源碼\SumatraPDF.exe
?????文件????????761??2009-01-19?00:01??scoket文檔及實例(含有客戶端和服務器端)+源碼\sumatrapdfprefs.dat
?????文件??????10134??2007-06-12?16:45??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\AquaOS.ico
?????文件??????10134??2007-06-12?16:45??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\AquaOS.ico
?????文件??????16920??2007-06-18?23:02??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\chat_frm.cs
?????文件??????15878??2007-06-16?20:03??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\chat_frm.Designer.cs
?????文件??????25791??2007-06-16?20:03??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\chat_frm.resx
?????文件???????4193??2007-06-18?22:58??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\EasyChat_Client.csproj
?????文件????????555??2007-06-10?13:51??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\EasyChat_Client.csproj.user
?????文件????????918??2007-06-17?20:55??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\EasyChat_Client.sln
????..A..H.?????40960??2008-11-17?22:55??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\EasyChat_Client.suo
?????文件???????5152??2007-06-17?23:25??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\login_frm.cs
?????文件???????6858??2007-06-12?15:20??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\login_frm.Designer.cs
?????文件???????5814??2007-06-12?15:20??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\login_frm.resx
?????文件????????471??2007-06-16?19:00??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\Program.cs
?????文件???????1200??2007-06-09?11:58??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\Properties\AssemblyInfo.cs
?????文件???????3228??2007-06-16?18:31??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\Properties\Resources.Designer.cs
?????文件?????158985??2007-06-16?18:23??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\Properties\Resources.resx
?????文件???????1091??2007-06-09?11:58??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\Properties\Settings.Designer.cs
?????文件????????249??2007-06-09?11:58??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\Properties\Settings.settings
?????文件???????7258??2007-06-13?22:04??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\Resources\msg.wav
?????文件??????94252??2007-06-16?18:23??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\Resources\nudge.wav
?????文件????????814??2007-06-12?09:42??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\Backup\TCPConnection.cs
?????文件?????148480??2009-01-07?19:03??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\bin\Debug\EasyChat.exe
?????文件??????48640??2009-01-07?19:03??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\bin\Debug\EasyChat.pdb
?????文件???????5632??2005-12-08?14:51??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\bin\Debug\EasyChat.vshost.exe
?????文件?????159744??2007-06-18?23:21??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\bin\Release\EasyChat.exe
?????文件??????40448??2007-06-18?23:21??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\bin\Release\EasyChat.pdb
?????文件???????5632??2005-12-08?14:51??scoket文檔及實例(含有客戶端和服務器端)+源碼\復件?EasyChat_Client\復件?EasyChat_Client\bin\Release\EasyChat.vshost.exe
............此處省略119個文件信息
評論
共有 條評論