资源简介

socket  实现聊天


  /// <summary>
        /// 启动监听,轮询监听客户机请求并将客户端套接字存入转发表
        /// </summary>
        public void StartUp()
        {
            IPAddress _ip = Dns.GetHostAddresses(Dns.GetHostName())[2];//可能有多个,此时的IP是本地IP
            _tcpl = new TcpListener(_ip, _port);
            _tcpl.Start();//开始侦听传入的连接请求。 
            Console.WriteLine("服务器已启动,正在监听...\n");
            Console.WriteLine(string.Format("服务器IP:{0}\t端口号:{1}\n", _ip, _port));
            while (true)
            {
                byte[] packetBuff = new byte[_maxPacket];// 接收数据缓冲区大小64K 

                //AcceptSocket 是一个阻止方法,该方法返回可用于发送和接收数据的 Socket。
                //如果希望避免阻止,请使用 Pending 方法来确定传入连接队列中的连接请求是否可用。 
                //返回的 Socket 是使用远程主机的 IP 地址和端口号初始化的。
                //您可以使用 Socket 类中任何可用的 Send 和 Receive 方法与远程主机进行通信。
                //------------使用 Socket 后,请确保调用其 Close 方法。如果应用程序相对简单,-----------
                //请考虑使用 AcceptTcpClient 方法代替 AcceptSocket 方法。
                //TcpClient 提供了一些通过网络在阻止同步模式下发送和接收数据的简单方法。

                Socket newClient = _tcpl.AcceptSocket();//本地TcpListener 接受新的请求 
                //返回的 Socket 是使用远程主机的 IP 地址和端口号初始化的

                newClient.Receive(packetBuff);//将接受的远程SOCKET,将数据存入接受缓冲区
                string userName = Encoding.Unicode.GetString(packetBuff).TrimEnd('\0');

                //验证是否为唯一用户,有了就发送失败命令给请求客户
                if (_transmit_tb.Count != 0 && _transmit_tb.ContainsKey(userName))
                {
                    newClient.Send(Encoding.Unicode.GetBytes("cmd::Failed"));
                    continue;
                }
                else
                {
                    newClient.Send(Encoding.Unicode.GetBytes("cmd::Successful"));
                }

                //将新连接加入转发表并创建线程为其服务
                _transmit_tb.Add(userName, newClient);
                //-----------------------
                string svrlog = string.Format("[系统消息]新用户 {0} 在 {1} 已连接... 当前在线人数: {2}\r\n\r\n", userName, DateTime.Now, _transmit_tb.Count);
                Console.WriteLine(svrlog);
                //------------------------

                Thread clientThread = new Thread(new ParameterizedThreadStart(ThreadFunc));
                clientThread.Start(userName);

                //向所有客户机发送系统消息,说有人上线了
                foreach (DictionaryEntry de in _transmit_tb)
                {
                    string _clientName = de.Key as string;
                    Socket _clientSkt = de.Value as Socket;
                    if (!_clientName.Equals(userName))
                    {
                        _clientSkt.Send(Encoding.Unicode.GetBytes(svrlog));
                    }
                }
            }
        }






资源截图

代码片段和文件信息

using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Net.Sockets;//++++
using System.Windows.Forms;
using System.Threading;//++++
using System.Runtime.Serialization;//++++
using System.Runtime.InteropServices;//++++
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;//++++
using System.Media;//+++++

namespace EasyChat
{
    public partial class chat_frm : Form
    {

        #region 私有字段

        /// 
        /// 当前用户名
        /// 

        private string _username = null;

        /// 
        /// 数据缓冲区大小
        /// 

        private int _maxPacket = 2048;//2K的缓冲区

        //

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     183663  2008-11-17 22:56  scoket文档及实例(含有客户端和服务器端)+源码\C#.Net网络程序开发-Socket篇.pdf

     文件    1003008  2008-08-23 12:41  scoket文档及实例(含有客户端和服务器端)+源码\SumatraPDF.exe

     文件        761  2009-01-19 00:01  scoket文档及实例(含有客户端和服务器端)+源码\sumatrapdfprefs.dat

     文件      10134  2007-06-12 16:45  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\AquaOS.ico

     文件      10134  2007-06-12 16:45  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\AquaOS.ico

     文件      16920  2007-06-18 23:02  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\chat_frm.cs

     文件      15878  2007-06-16 20:03  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\chat_frm.Designer.cs

     文件      25791  2007-06-16 20:03  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\chat_frm.resx

     文件       4193  2007-06-18 22:58  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\EasyChat_Client.csproj

     文件        555  2007-06-10 13:51  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\EasyChat_Client.csproj.user

     文件        918  2007-06-17 20:55  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\EasyChat_Client.sln

    ..A..H.     40960  2008-11-17 22:55  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\EasyChat_Client.suo

     文件       5152  2007-06-17 23:25  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\login_frm.cs

     文件       6858  2007-06-12 15:20  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\login_frm.Designer.cs

     文件       5814  2007-06-12 15:20  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\login_frm.resx

     文件        471  2007-06-16 19:00  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\Program.cs

     文件       1200  2007-06-09 11:58  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\Properties\AssemblyInfo.cs

     文件       3228  2007-06-16 18:31  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\Properties\Resources.Designer.cs

     文件     158985  2007-06-16 18:23  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\Properties\Resources.resx

     文件       1091  2007-06-09 11:58  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\Properties\Settings.Designer.cs

     文件        249  2007-06-09 11:58  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\Properties\Settings.settings

     文件       7258  2007-06-13 22:04  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\Resources\msg.wav

     文件      94252  2007-06-16 18:23  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\Resources\nudge.wav

     文件        814  2007-06-12 09:42  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\Backup\TCPConnection.cs

     文件     148480  2009-01-07 19:03  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\bin\Debug\EasyChat.exe

     文件      48640  2009-01-07 19:03  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\bin\Debug\EasyChat.pdb

     文件       5632  2005-12-08 14:51  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\bin\Debug\EasyChat.vshost.exe

     文件     159744  2007-06-18 23:21  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\bin\Release\EasyChat.exe

     文件      40448  2007-06-18 23:21  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\bin\Release\EasyChat.pdb

     文件       5632  2005-12-08 14:51  scoket文档及实例(含有客户端和服务器端)+源码\复件 EasyChat_Client\复件 EasyChat_Client\bin\Release\EasyChat.vshost.exe

............此处省略119个文件信息

评论

共有 条评论