版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C#基于Socket實(shí)現(xiàn)簡單聊天室功能因?yàn)檫@段時(shí)間在學(xué)習(xí)Socket,所以就試著寫了一個(gè)簡單的聊天室。主要分為服務(wù)器端和多個(gè)客戶端。利用服務(wù)器端作數(shù)據(jù)中轉(zhuǎn)站,實(shí)現(xiàn)消息群發(fā)。
1、服務(wù)器端有兩個(gè)類:
usingSystem.Collections.Generic;
usingSystem.Net;
usingSystem.Net.Sockets;
namespace聊天室_Socket_TCP_服務(wù)器端
classProgram
{
staticListClientclients=newListClient
staticListClientnotClients=newListClient
///summary
///廣播消息
////summary
///paramname="message"/param
publicstaticvoidCastMessageTOAllConnetedClients(stringmessage)
{
foreach(varclientinclients)
{
if(client.Conneted)
{
client.CastMessage(message);
}
else
{
notClients.Add(client);
}
}
foreach(vartempinnotClients)
{
clients.Remove(temp);
}
}
staticvoidMain(string[]args)
{
SockettcpSever=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
tcpSever.Bind(newIPEndPoint(IPAddress.Parse(""),8899));
tcpSever.Listen(100);//監(jiān)聽是否有客戶端發(fā)起連接
Console.WriteLine("Begintolisten...");
while(true)
{
SocketclientSocket=tcpSever.Accept();
if(clientSocket!=null)
{
Console.WriteLine("Aclienthasconnneted...");
Clientclient=newClient(clientSocket);//將每個(gè)新創(chuàng)建的連接通信放于client類做通信
clients.Add(client);
}
}
Console.ReadKey();
}
}
}
usingSystem;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.Threading;
namespace聊天室_Socket_TCP_服務(wù)器端
///summary
///利用該類和客戶端做通信
////summary
classClient
{
publicSocketclientSocket;
privateThreadmesManageTherad;
privatebyte[]bufffer=newbyte[20];
publicClient(Socketsoc)
{
clientSocket=soc;
//由于消息是不斷發(fā)送的,需要多次進(jìn)行處理。這里開一個(gè)線程,專門用來處理消息。
mesManageTherad=newThread(MessageSendFromClient);
mesManageTherad.Start();
}
privatevoidMessageSendFromClient()
{
//開啟的線程一直檢測(cè)客戶端客戶端發(fā)過來的消息
while(true)
{
//判斷連接是否斷開,
SelectMode.SelectRead讀狀態(tài)模式。
//poll已斷開返回true
if(clientSocket.Poll(10,SelectMode.SelectRead)==true)
{
clientSocket.Close();
break;//終止本線程
}
intbyteNum=clientSocket.Receive(bufffer);//從客戶端接受消息
stringmes=Encoding.UTF8.GetString(bufffer,0,byteNum);
Console.WriteLine("客戶端發(fā)送過來的消息:"+mes);
//廣播消息出去給每個(gè)客戶端
Program.CastMessageTOAllConnetedClients(mes);//對(duì)CastMessage的一層封裝
}
}
///summary
///SendmessagestoClients
////summary
publicvoidCastMessage(stringmessage)
{
byte[]data=Encoding.UTF8.GetBytes(message);
clientSocket.Send(data);
}
///summary
///判斷是否斷開連接
////summary
publicboolConneted
{
get
{
returnclientSocket.Connected;
}
}
}
}
服務(wù)器端邏輯:
這里的服務(wù)器主要負(fù)責(zé)建立連接,接受客戶端消息,廣播客戶端發(fā)來的消息。
服務(wù)器通過socket對(duì)象綁定服務(wù)器IP和相應(yīng)端口號(hào)(端口號(hào)自己開,沒有被其他軟件占用就好),通過Listen監(jiān)聽和服務(wù)器socket對(duì)象的Accept方法捕捉連接到服務(wù)器的客戶端socket,將捕捉到的客戶端socket放入List集合中方便統(tǒng)一管理和后面的消息群發(fā)。
關(guān)于捕捉到的客戶端socket的邏輯處理放在了Client類中統(tǒng)一管理。
Client類將收到客戶端的消息進(jìn)行接受,在Client中開啟一個(gè)線程用于不斷得檢測(cè)是否有新消息從客戶端發(fā)送過來,若有消息發(fā)送過來則通過CastMessageTOAllConnetedClients方法(對(duì)socket對(duì)象的Send方法的封裝)發(fā)送給每一個(gè)客戶端。
2.客戶端
客戶端是在Unity中使用NGUI插件簡單開發(fā)的一個(gè)聊天界面。把腳本掛在NGUI控件上即可??蛻舳酥饕?fù)責(zé)顯示消息,發(fā)送消息,接收消息。
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.Threading;
usingUnityEngine;
publicclassChatManager:MonoBehaviour{
privatestring_ipAdress="";
privateint_port=8899;
EndPointremotPoint;
SocketclientSocket;
publicUIInputbuttonInp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 景區(qū)拓展基地運(yùn)營方案
- 酒店運(yùn)營方案及策劃
- 景區(qū)運(yùn)營公司方案
- 婦幼生活廣場(chǎng)運(yùn)營方案
- 無極運(yùn)營方案效果評(píng)估
- 運(yùn)營解答與推廣方案范文
- 海航信托運(yùn)營方案設(shè)計(jì)
- 鋼琴銷售運(yùn)營方案策劃
- 系統(tǒng)運(yùn)營維護(hù)技術(shù)方案
- 人工智能輔助下的大學(xué)物理課程個(gè)性化學(xué)習(xí)方案設(shè)計(jì)教學(xué)研究課題報(bào)告
- 托幼機(jī)構(gòu)傳染病應(yīng)急處置預(yù)案
- 合歡花苷類對(duì)泌尿系感染的抗菌作用
- 汕頭市金平區(qū)2025屆九年級(jí)數(shù)學(xué)第一學(xué)期期末檢測(cè)試題含解析
- 工程施工監(jiān)理技術(shù)標(biāo)
- 2023年司法鑒定所黨支部年終總結(jié)
- 向規(guī)范要50分規(guī)范答題主題班會(huì)-課件
- 腫瘤生物學(xué)1(完整版)
- cie1931年標(biāo)準(zhǔn)色度觀測(cè)者的光譜色品坐標(biāo)
- 2023-2024學(xué)年廣東省廣州市小學(xué)數(shù)學(xué)二年級(jí)上冊(cè)期末自我評(píng)估試題
- YS/T 971-2014鈦鎳形狀記憶合金絲材
- 方小丹建筑地基基礎(chǔ)設(shè)計(jì)的若干問題課件
評(píng)論
0/150
提交評(píng)論