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.s; 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 public ServerMain { InitializeComponent; } private void ServerMain_Loadobject sender, EventArgs e { this.Star.Enabled true; this.Stop.Enabled false; } private void 配置参数 ToolStripMenuItem_Clickobject sender, EventArgs e { Set TSet new Set; TSet.ShowDialogO; } private void 关于 ToolStripMenuItem_Clickobject sender, EventArgs e { About TAbout new About; TAbout.Show; } III summary III获得XML文件中的端口号 III /summary III retums/retums private int GetPort try XmlDocument TDoc new XmlDocument; TDoc.LoadHSettings.xml; string TPort TDoc.GetElementsByTagNameServerPort[0].InnerXml; return Convert.ToInt32TPort; 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 privateint ClientNumb;〃存放客户端数量 63 privatebyte[] MsgBuffer;//存放消息数据 64 65 privatevoid Star_Clickobject sender, EventArgs e 66 { 67 ServerSocket 二 new SocketAddressFamily.InterNetwork, SocketType.Stream, Protoco IType.Tcp; 68 Serverlnfonew IPEndPointIPAddress.Any,this.GetPort; 69 ServerSocket.BindServerInfo;// SOCKET 接口和 IP 端 口绑定 70 ServerSocket.Listen 10;//开始监听,并且挂起数为 10 71 72 ClientSocket new Socket[65535];〃为客户端提供连接个数 73 MsgBuffer new byte[65535];// 消息数据大小 74 ClientNumb0;〃数量从0开始统计 75 76 ServerThread new ThreadRecieve Accept; 〃将接受客户端连接的方法委托给线程 77 S erverThread. Start;〃线程开始运行 78 79 CheckForlllegalCrossThreadCalls false;// 不捕获对错误线程的调用 80 81 this.Star.Enabled false; 82 this.Stop.Enabled true; 83 this.StateMsg.Text ”服务正在运行运行端 口 ”this.GetPort.ToString; 84 this.ClientList.Items.Add服务于DateTime.Now.ToStringO 开始运行.; 85 } 86 87 〃接受客户端连接的方法 88 private void RecieveAccept 89 { 90 while true 91 92 ClientSocket[ClientNumb] ServerSocket.Accept; 93 ClientSocket[ClientNumb] .BeginReceiveMsgBuffer, 0, MsgBuffer.Length, 0, ne w AsyncCallbackRecieveCallBack,ClientSocket[ClientNumb]; 94 this.ClientList.Items.AddClientSocket[ClientNumb].RemoteEndPo