最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#簡單聊天室雛形

 更新時間:2022年02月11日 11:14:39   作者:52unity  
這篇文章主要為大家詳細(xì)介紹了C#簡單聊天室雛形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C#簡單聊天室雛形的具體代碼,供大家參考,具體內(nèi)容如下

程序使用的控制臺的黑窗口模擬程序,第一次涉及網(wǎng)絡(luò)編程,寫出來方便以后查閱,代碼很簡單
首先是服務(wù)器端的代碼:

public class ServerControl
? ? {
? ? ? ? private Socket serverSocket;
? ? ? ? public ServerControl()
? ? ? ? {
? ? ? ? ? ? serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

? ? ? ? }
? ? ? ? public void Start()
? ? ? ? {
? ? ? ? ? ? serverSocket.Bind(new IPEndPoint(IPAddress.Any, 12312)); ?//設(shè)置接收任何ip
? ? ? ? ? ? serverSocket.Listen(10); ?//最大掛起數(shù)
? ? ? ? ? ? Console.WriteLine("服務(wù)器啟動成功");
? ? ? ? }?
? ? }

主程序:

static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? ServerControl server = new ServerControl();
? ? ? ? ? ? server.Start();
? ? ? ? ? ? Console.ReadKey();
? ? ? ? }

下面是客戶端代碼:

public class ClientControl
? ? {
? ? ? ? Socket clientSocket;
? ? ? ? public ClientControl()
? ? ? ? {
? ? ? ? ? ? clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
? ? ? ? }
? ? ? ? public void Connect(string ip, int port)
? ? ? ? {
? ? ? ? ? ? clientSocket.Connect(ip, port);
? ? ? ? ? ? Console.WriteLine("連接服務(wù)器成功");
? ? ? ? }
? ? }

客戶端的調(diào)用代碼:

static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? ClientControl client = new ClientControl();
? ? ? ? ? ? client.Connect("127.0.0.1",12312);
? ? ? ? ? ? Console.ReadKey();
? ? ? ? }

此時客戶端就可以順利連接到服務(wù)器,下一步是在服務(wù)器上顯示是誰連接到服務(wù)器了很簡單只需要在服務(wù)器端加一個方法來檢測:

?private void Accept()
? ? ? ? {
? ? ? ? ? ? //接收客戶端方法,會掛起當(dāng)前線程
? ? ? ? ? ? Socket client = serverSocket.Accept();
? ? ? ? ? ? IPEndPoint point = client.RemoteEndPoint as IPEndPoint;
? ? ? ? ? ? Console.WriteLine(point.Address + "[" + point.Port + "]連接成功");
? ? ? ? ? ? Accept(); ? //尾遞歸
? ? ? ? }

因?yàn)橐诜?wù)器啟動就要去檢測有沒有連接到服務(wù)器的ip,所以需要在start方法中開辟一個新的線程來調(diào)用Accept方法

Thread threadAccept = new Thread(Accept); ?//接收一個委托方法
? ? ? ? ? ? threadAccept.IsBackground = true; ?//設(shè)置為后臺線程
? ? ? ? ? ? threadAccept.Start();

下一步就是客戶端要往服務(wù)器發(fā)送消息

客戶端的ClientControl類代碼:

public void Send(string msg) ?
? ? ? ? {
? ? ? ? ? ?clientSocket.Send(Encoding.UTF8.GetBytes(msg));
? ? ? ? }

客戶端主程序調(diào)用代碼:

Console.WriteLine("請輸入要發(fā)送的內(nèi)容, 輸入exit退出:");
? ? ? ? ? ? string msg = Console.ReadLine();
? ? ? ? ? ? while (msg != "exit")
? ? ? ? ? ? {
? ? ? ? ? ? ? ? client.Send(msg);
? ? ? ? ? ? ? ? msg = Console.ReadLine();
? ? ? ? ? ? }

下一步就是要在服務(wù)器接收客戶端的輸入內(nèi)容

private void Receive(object obj)
? ? ? ? {
? ? ? ? ? ? Socket client = obj as Socket;

? ? ? ? ? ? IPEndPoint point = client.RemoteEndPoint as IPEndPoint;
? ? ? ? ? ? try ? //防止客戶端異常斷開拋異常
? ? ? ? ? ? {
? ? ? ? ? ? ? ? byte[] msg = new byte[1024];
? ? ? ? ? ? ? ? int msglen = client.Receive(msg);
? ? ? ? ? ? ? ? Console.WriteLine(point.Address + "[" + point.Port + "]:" + Encoding.UTF8.GetString(msg, 0, msglen)); ? ? ? ? ? ?client.Send(Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(msg, 0, msglen))); ? //這個地方加了個小功能,就是客戶端來一個消息 服務(wù)器給他發(fā)回去同樣的,可以去掉
? ? ? ? ? ? ? ? Receive(client); ? //尾遞歸
? ? ? ? ? ? }
? ? ? ? ? ? catch
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine(point.Address + "[" + point.Port + "]:" + "已經(jīng)斷開");
? ? ? ? ? ? }

這個方法執(zhí)行同樣會掛起線程,所以要開辟一個新的線程,因?yàn)檫@是接收客戶端的消息,所以這個新線程要寫在剛才寫的Accept方法里面

Thread threadReceive = new Thread(Receive);
? ? ? ? ? ? threadReceive.IsBackground = true;
? ? ? ? ? ? threadReceive.Start(client);

附加:

剛才不是寫了一個服務(wù)器接收到消息,會給客戶端返回一個相同的消息,所以還要在客戶端接收服務(wù)器的消息,方法和在服務(wù)器端接收大同小異

private void Receive()
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? byte[] msg = new byte[1024];
? ? ? ? ? ? ? ? int msglen = clientSocket.Receive(msg);
? ? ? ? ? ? ? ? Console.WriteLine("服務(wù)器說:" + Encoding.UTF8.GetString(msg));

? ? ? ? ? ? ? ? Receive();
? ? ? ? ? ? }
? ? ? ? ? ? catch
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine("服務(wù)器已經(jīng)斷開");
? ? ? ? ? ? }?
}

以為一連上就要去檢測服務(wù)器有沒有消息,所以開辟一個線程 寫在客戶端的 connect方法中

Thread threadReceive = new Thread(Receive);
? ? ? ? ? ? threadReceive.IsBackground = true;
? ? ? ? ? ? threadReceive.Start();

好了 ,一個最簡單的聊天室就算寫完了
想多人登陸 就在vs中找到客戶端的debug文件夾 找到exe文件運(yùn)行

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

中宁县| 体育| 南溪县| 延边| 左权县| 张北县| 岳普湖县| 新郑市| 新乡市| 宜春市| 马鞍山市| 屯留县| 论坛| 仁化县| 水富县| 平和县| 米脂县| 攀枝花市| 大庆市| 千阳县| 沈丘县| 万全县| 奉新县| 翁源县| 泽库县| 齐河县| 朔州市| 宝清县| 东山县| 巫山县| 平南县| 蛟河市| 泰宁县| 靖安县| 汝州市| 平罗县| 长岛县| 桃源县| 邓州市| 青川县| 罗田县|