1、C#下如何实现服务器客户端的聊天程序最近也在接触SOCKET编程,在当今这样一个网络时代,很多技术都以网络为中心在诞生,至少我认为是这样的,而SOCKET套接字接口,在实现网络通讯上处于关键地位,所以不会SOCKET是不行的。首先,本文主要是针对那些刚接触SOCKET编程的朋友,如果是高手,就可以不看此文啦,可以去陪陪老婆,比如逛街或看电视.在开始之前,我们需要预习一些基础知识:什么是SOCKET套接字?SOCKET通常有那几种数据格式?线程的概念?(以上基本知识我就不讲了,网上这方面资料很多的,大家找资料看下吧)我要介绍的是一个服务器端+客户端的聊天系统,程序比较简单,我先把程序运行的界面给
2、大家看下:上面是服务器端运行界面;下面把客户端界面贴给大家看下:功能比较简单,服务器的端口号可以在“系统菜单”里面的参数配置进行修改的。看了上面的图,下面我们就给大家把代码贴出来:(因为程序比较简单,所以本人就没有去分层啦)服务器端代码:1usingSystem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Data;5usingSystem.Drawing;6usingSystem.Text;7usingSystem.Windows.Forms;89usingSystem.Net;10usi
3、ngSystem.Net.Sockets;11usingSystem.Threading;12usingSystem.Xml;1314namespaceServer1516publicpartialclassServerMain:Form1718publicServerMain()1920InitializeComponent();212223privatevoidServerMain_Load(objectsender,EventArgse)2425this.CmdStar.Enabled=true;26this.CmdStop.Enabled=false;272829privatevoid
4、配置参数ToolStripMenuItem_Click(objectsender,EventArgse)3031SetTSet=newSet();32TSet.ShowDialog();333435privatevoid关于ToolStripMenuItem_Click(objectsender,EventArgse)3637AboutTAbout=newAbout();38TAbout.Show();3940/41/获得XML文件中的端口号42/43/44privateintGetPort()4546try4748XmlDocumentTDoc=newXmlDocument();49TDoc
5、.Load(Settings.xml);50stringTPort=TDoc.GetElementsByTagName(ServerPort)0.InnerXml;51returnConvert.ToInt32(TPort);525354catchreturn6600;/默认是6600555657/声明将要用到的类58privateIPEndPointServerInfo;/存放服务器的IP和端口信息59privateSocketServerSocket;/服务端运行的SOCKET60privateThreadServerThread;/服务端运行的线程61privateSocketClien
6、tSocket;/为客户端建立的SOCKET连接62privateintClientNumb;/存放客户端数量63privatebyteMsgBuffer;/存放消息数据6465privatevoidCmdStar_Click(objectsender,EventArgse)6667ServerSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);68ServerInfo=newIPEndPoint(IPAddress.Any,this.GetPort();69ServerSocket.B
7、ind(ServerInfo);/将SOCKET接口和IP端口绑定70ServerSocket.Listen(10);/开始监听,并且挂起数为107172ClientSocket=newSocket65535;/为客户端提供连接个数73MsgBuffer=newbyte65535;/消息数据大小74ClientNumb=0;/数量从0开始统计7576ServerThread=newThread(RecieveAccept);/将接受客户端连接的方法委托给线程77ServerThread.Start();/线程开始运行7879CheckForIllegalCrossThreadCalls=fal
8、se;/不捕获对错误线程的调用8081this.CmdStar.Enabled=false;82this.CmdStop.Enabled=true;83this.StateMsg.Text=服务正在运行+运行端口:+this.GetPort().ToString();84this.ClientList.Items.Add(服务于+DateTime.Now.ToString()+开始运行.);858687/接受客户端连接的方法88privatevoidRecieveAccept()8990while(true)9192ClientSocketClientNumb=ServerSocket.Acc
9、ept();93ClientSocketClientNumb.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,newAsyncCallback(RecieveCallBack),ClientSocketClientNumb);94this.ClientList.Items.Add(ClientSocketClientNumb.RemoteEndPoint.ToString()+成功连接服务器.);95ClientNumb+;96979899/回发数据给客户端100privatevoidRecieveCallBack(IAsyncResultAR)1011
10、02try103104SocketRSocket=(Socket)AR.AsyncState;105intREnd=RSocket.EndReceive(AR);106for(inti=0;iClientNumb;i+)107108if(ClientSocketi.Connected)109110ClientSocketi.Send(MsgBuffer,0,REnd,0);111112RSocket.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,newAsyncCallback(RecieveCallBack),RSocket);113114115116catch117118119120privatevoidCmdStop_Click(objectsender,EventArgse)121122ServerThread.Abort();/线程终止123ServerSocket.Close();/关闭SOCKET
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1