C#基于Socket實(shí)現(xiàn)簡單聊天室功能_第1頁
C#基于Socket實(shí)現(xiàn)簡單聊天室功能_第2頁
C#基于Socket實(shí)現(xiàn)簡單聊天室功能_第3頁
C#基于Socket實(shí)現(xiàn)簡單聊天室功能_第4頁
C#基于Socket實(shí)現(xiàn)簡單聊天室功能_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論