C#使用Socket實(shí)現(xiàn)本地多人聊天室_第1頁(yè)
C#使用Socket實(shí)現(xiàn)本地多人聊天室_第2頁(yè)
C#使用Socket實(shí)現(xiàn)本地多人聊天室_第3頁(yè)
C#使用Socket實(shí)現(xiàn)本地多人聊天室_第4頁(yè)
C#使用Socket實(shí)現(xiàn)本地多人聊天室_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第C#使用Socket實(shí)現(xiàn)本地多人聊天室本文實(shí)例為大家分享了C#使用Socket實(shí)現(xiàn)本地多人聊天室的具體代碼,供大家參考,具體內(nèi)容如下

【腳本一:Server端】

使用本機(jī)地址:

完整代碼

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Net;

usingSystem.Net.Sockets;

usingSystem.Text;

usingSystem.Threading;

namespaceConsoleApp1

publicclassServer

{

SocketmySocket=null;

DictionaryIPAddress,SocketcliDic=newDictionaryIPAddress,Socket

publicvoidConnect(intport)

{

stringIP="";

//IPAddressIPAddress=IPAddress.Parse("");

IPAddressaddress=IPAddress.Any;

//創(chuàng)建IP終結(jié)點(diǎn),把IP地址與端口綁定到網(wǎng)絡(luò)終結(jié)點(diǎn)上

IPEndPointendPoint=newIPEndPoint(address,port);

//創(chuàng)建客戶端套接字

mySocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

///監(jiān)聽(tīng)套接字終結(jié)點(diǎn)

mySocket.Bind(endPoint);

//服務(wù)端可接收客戶端連接數(shù)量為無(wú)限個(gè)

mySocket.Listen(0);

//開(kāi)啟線程監(jiān)聽(tīng)客戶端

ThreadmyThread=newThread(Listen_Con);

myThread.Start();

Console.WriteLine("開(kāi)始監(jiān)聽(tīng)...");

}

///summary

///接收連接的客戶端并存儲(chǔ)客戶端的信息

////summary

///paramname="obj"/param

publicvoidListen_Con(Objectobj)

{

SocketcliSocket=null;

//持續(xù)監(jiān)聽(tīng)客戶端的請(qǐng)求

while(true)

{

try

{

cliSocket=mySocket.Accept();

}

catch(Exceptione)

{

Console.WriteLine(e.Message);

}

stringcliEndPoint=cliSocket.RemoteEndPoint.ToString();

IPAddresscliAddress=(cliSocket.RemoteEndPointasIPEndPoint).Address;

intcliPort=(cliSocket.RemoteEndPointasIPEndPoint).Port;

cliDic.Add(cliAddress,cliSocket);

stringMsgStr="[客戶端結(jié)點(diǎn):"+cliEndPoint+"\n+客戶端IP:"+cliAddress.ToString()+"\n客戶端端口:"+

cliPort.ToString()+"\n已連接]";

byte[]MsgBytes=Encoding.UTF8.GetBytes(MsgStr);

cliSocket.Send(MsgBytes);

Threadrec_Cli=newThread(Receive_Con);

rec_Cli.Start(cliSocket);

Threadsed_Cli=newThread(SendToCli);

sed_Cli.Start(cliSocket);

}

}

///summary

///接收已連接的客戶端發(fā)送的消息

////summary

///paramname="socket"/param

publicvoidReceive_Con(Objectsocket)

{

Socketclient=socketasSocket;

while(true)

{

//創(chuàng)建大小為1024*1024的內(nèi)存緩沖區(qū)(1M)

byte[]recBytes=newbyte[1024*1024];

//嘗試把接收的字節(jié)存儲(chǔ)到緩沖區(qū)

try

{

intlength=client.Receive(recBytes);

//把機(jī)器接收的字節(jié)數(shù)組轉(zhuǎn)換為string

stringrecMsg=Encoding.UTF8.GetString(recBytes,0,length);

//將服務(wù)器接收到的信息轉(zhuǎn)發(fā)到所有已連接的客戶端

if(cliDic.Count0)

{

foreach(varsocincliDic)

{

soc.Value.Send(Encoding.UTF8.GetBytes("["+soc.Value.RemoteEndPoint+"]:"+recMsg));

}

}

Console.WriteLine("["+client.RemoteEndPoint+"]:"+recMsg);

}

catch(Exception)

{

cliDic.Remove((client.RemoteEndPointasIPEndPoint).Address);

//客戶端斷開(kāi)的異常

Console.WriteLine("[客戶端"+(client.RemoteEndPointasIPEndPoint).Address+"已斷開(kāi)]");

Console.WriteLine("[客戶端終結(jié)點(diǎn):"+client.RemoteEndPoint+"]");

//斷開(kāi)套接字

client.Close();

break;

}

}

}

publicvoidSendToCli(objectobj)

{

SocketcurCliSoc=objasSocket;

while(true)

{

byte[]ByteToAll=newbyte[1024*1024];

try

{

stringMsgToAll=Console.ReadLine();

ByteToAll=Encoding.UTF8.GetBytes("[服務(wù)端]:"+MsgToAll);

curCliSoc.Send(ByteToAll);

}

catch(Exception)

{

Console.WriteLine("ERROR:"+curCliSoc.RemoteEndPoint+"已與服務(wù)端斷開(kāi)!");

curCliSoc.Close();

if(cliDic.ContainsKey((curCliSoc.RemoteEndPointasIPEndPoint).Address))

{

cliDic.Remove((curCliSoc.RemoteEndPointasIPEndPoint).Address);

}

}

}

}

}

publicclassServerMain

{

staticvoidMain(string[]args)

{

Servers1=newServer();

s1.Connect(8800);

}

}

}

Server端運(yùn)行結(jié)果:

【腳本二:Client端】

完整代碼

usingSystem;

usingSystem.Net;

usingSystem.Net.Sockets;

usingSystem.Text;

usingSystem.Threading;

namespaceConsoleApp1

publicclassClient

{

stringSerIP="";

SocketmyClient=null;

ThreadConnectThread=null;

IPAddressSerAdd;

IPEndPointSerEP;

publicvoidConnect_To_Ser(intport)

{

myClient=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

SerAdd=IPAddress.Parse(SerIP);

SerEP=newIPEndPoint(SerAdd,port);

while(true)

{

try

{

myClient.Connect(SerEP);

break;

}

catch

{

Console.WriteLine("無(wú)法連接到服務(wù)端,請(qǐng)重試...");

}

}

ConnectThread=newThread(Receive_Ser);

ConnectThread.Start();

}

publicvoidReceive_Ser()

{

while(true)

{

byte[]SerBytes=newbyte[1024*1024];

try

{

intlength=myClient.Receive(SerBytes);

stringMsg=Encoding.UTF8.GetString(SerBytes,0,length);

Console.WriteLine(Msg);

}

catch(Exception)

{

Console.WriteLine("已與服務(wù)端斷開(kāi)連接...");

break;

}

}

}

publicvoidSendToSer()

{

while(true)

{

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論