资源简介
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个文件信息
相关资源
- Visual C#.NET串口通信及测控应用典型实
- C#调用VLC 多窗体播放功能
- 198个经典C#WinForm 超赞的完整版
- C# 教程内含多个教程
- WebApi搭建简单服务器demo亲测可用
- DotNetty系列六:将服务端和客户端改为
- 分享解决vs2015调试asp.net程序出现无法
- C#版海康客户端API封装
- C#开发大全提高卷随书光盘
- C#的DNS协议完整实现代码
- C# Socket多客户端异步通信
- C# 一个完整的客户端和服务器端
- TCP多个客户端与服务端数据传输源码
- C#计算器设计
- c#异步命名管道以及demo
- FTP客户端C#实现
- 工业OPC客户端读取,并存SQL
- C#简单的服务器转发
- VS2012 C# 远程连接SQLserver数据库服务器
- C# 异步 SOCKET 服务和客户端
- FTP课程设计(服务端+客户端) 源码
- ASP.NET 服务器控件:DropDownCheckBoxList
- 远程控制服务端/客户端
- C#简易WebSocket通信(非服务器实现)
- C#AJAX
- c#学习根据日期查询星期,自动售货机
- C#开发的游戏服务器demoC/S案例,可运
- 自动从NTP服务器同步本地时间WinForm
- C#写的控制台NTP服务端以及winform的N
- 一套类moba的教学视频百度云地址

川公网安备 51152502000135号
评论
共有 条评论