C#下如何实现服务器客户端的聊天程序.docx

上传人:b****1 文档编号:2099842 上传时间:2022-10-26 格式:DOCX 页数:8 大小:99.71KB
下载 相关 举报
C#下如何实现服务器客户端的聊天程序.docx_第1页
第1页 / 共8页
C#下如何实现服务器客户端的聊天程序.docx_第2页
第2页 / 共8页
C#下如何实现服务器客户端的聊天程序.docx_第3页
第3页 / 共8页
C#下如何实现服务器客户端的聊天程序.docx_第4页
第4页 / 共8页
C#下如何实现服务器客户端的聊天程序.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

C#下如何实现服务器客户端的聊天程序.docx

《C#下如何实现服务器客户端的聊天程序.docx》由会员分享,可在线阅读,更多相关《C#下如何实现服务器客户端的聊天程序.docx(8页珍藏版)》请在冰豆网上搜索。

C#下如何实现服务器客户端的聊天程序.docx

C#下如何实现服务器客户端的聊天程序

最近也在接触SOCKET编程,在当今这样一个网络时代,很多技术都以网络为中心在诞生,至少我认为是这样的,而SOCKET套接字接口,在实现网络通讯上处于关键地位,所以不会SOCKET是不行的。

首先,本文主要是针对那些刚接触SOCKET编程的朋友,如果是高手,就可以不看此文啦,可以去陪陪老婆,比如逛街或看电视...

在开始之前,我们需要预习一些基础知识:

什么是SOCKET套接字?

SOCKET通常有那几种数据格式?

线程的概念?

(以上基本知识我就不讲了,网上这方面资料很多的,大家找资料看下吧)

我要介绍的是一个服务器端+客户端的聊天系统,程序比较简单,我先把程序运行的界面给大家看下:

上面是服务器端运行界面;下面把客户端界面贴给大家看下:

功能比较简单,服务器的端口号可以在“系统菜单”里面的参数配置进行修改的。

看了上面的图,下面我们就给大家把代码贴出来:

(因为程序比较简单,所以本人就没有去分层啦)

服务器端代码:

  1 using System;

  2 using System.Collections.Generic;

  3 using System.ComponentModel;

  4 using System.Data;

  5 using System.Drawing;

  6 using System.Text;

  7 using System.Windows.Forms;

  8 

  9 using System.Net;

 10 using System.Net.Sockets;

 11 using System.Threading;

 12 using System.Xml;

 13 

 14 namespace Server

 15 {

 16     public partial class ServerMain :

 Form

 17     {

 18         public ServerMain()

 19         {

 20             InitializeComponent();

 21         }

 22 

 23         private void ServerMain_Load(object sender, EventArgs e)

 24         {

 25             this.CmdStar.Enabled = true;

 26             this.CmdStop.Enabled = false;

 27         }

 28 

 29         private void 配置参数ToolStripMenuItem_Click(object sender, EventArgs e)

 30         {

 31             Set TSet = new Set();

 32             TSet.ShowDialog();

 33         }

 34 

 35         private void 关于ToolStripMenuItem_Click(object sender, EventArgs e)

 36         {

 37             About TAbout = new About();

 38             TAbout.Show();

 39         }

 40         /// 

 41         /// 获得XML文件中的端口号

 42         /// 

 43         /// 

 44         private int GetPort()

 45         {

 46             try

 47             {

 48                 XmlDocument TDoc = new XmlDocument();

 49                 TDoc.Load("Settings.xml");

 50                 string TPort = TDoc.GetElementsByTagName("ServerPort")[0].InnerXml;

 51                 return Convert.ToInt32(TPort);

 52 

 53             }

 54             catch { return 6600; }//默认是6600

 55         }

 56 

 57         //声明将要用到的类

 58         private IPEndPoint ServerInfo;//存放服务器的IP和端口信息

 59         private Socket ServerSocket;//服务端运行的SOCKET

 60         private Thread ServerThread;//服务端运行的线程

 61         private Socket[] ClientSocket;//为客户端建立的SOCKET连接

 62         private int ClientNumb;//存放客户端数量

 63         private byte[] MsgBuffer;//存放消息数据

 64 

 65         private void CmdStar_Click(object sender, EventArgs e)

 66         {

 67             ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

 68             ServerInfo=new IPEndPoint(IPAddress.Any,this.GetPort());

 69             ServerSocket.Bind(ServerInfo);//将SOCKET接口和IP端口绑定

 70             ServerSocket.Listen(10);//开始监听,并且挂起数为10

 71 

 72             ClientSocket = new Socket[65535];//为客户端提供连接个数

 73             MsgBuffer = new byte[65535];//消息数据大小

 74             ClientNumb = 0;//数量从0开始统计

 75 

 76             ServerThread = new Thread(RecieveAccept);//将接受客户端连接的方法委托给线程

 77             ServerThread.Start();//线程开始运行

 78 

 79             CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用

 80 

 81             this.CmdStar.Enabled = false;

 82             this.CmdStop.Enabled = true;

 83             this.StateMsg.Text = "服务正在运行"+"  运行端口:

"+this.GetPort().ToString();

 84             this.ClientList.Items.Add("服务于 " + DateTime.Now.ToString() + " 开始运行.");

 85         }

 86         

 87         //接受客户端连接的方法

 88         private void RecieveAccept()

 89         {

 90             while (true)

 91             {

 92                 ClientSocket[ClientNumb] = ServerSocket.Accept();

 93                 ClientSocket[ClientNumb].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack),ClientSocket[ClientNumb]);

 94                 this.ClientList.Items.Add(ClientSocket[ClientNumb].RemoteEndPoint.ToString()+" 成功连接服务器.");

 95                 ClientNumb++;

 96             }

 97         }

 98 

 99         //回发数据给客户端

100         private void RecieveCallBack(IAsyncResult AR)

101         {

102             try

103             {

104                 Socket RSocket = (Socket)AR.AsyncState;

105                 int REnd = RSocket.EndReceive(AR);

106                 for (int i = 0; i < ClientNumb; i++)

107                 {

108                     if (ClientSocket[i].Connected)

109                     {

110                         ClientSocket[i].Send(MsgBuffer, 0, REnd,0);

111                     }

112                     RSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack), RSocket);

113 

114                 }

115             }

116             catch { }

117 

118         }

119 

120         private void CmdStop_Click(object sender, EventArgs e)

121         {

122             ServerThread.Abort();//线程终止

123             ServerSocket.Close();//关闭SOCKET

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1