C/S程序,服务器端如何记录客户端登陆时的计算机名、IP地址..??? C/S程序,服务器端如何记录客户端登陆时的计算机名、IP地址、帐套名、用户名,本人在看 速达的E3 产品时,每当客户端登陆时,就显示上面的信息,1、客户端是如何将此信息发送给服务器端啊?2、服务器端是如何实现的啊?3、不知用C#程序如何实现啊?特来请教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我不知道你的c/s是在一台机器还是要网络访问的,一台机器的应该容易,如果是网络访问的,有TcpClient或是Socket能获得客户端的这些信息吧。猜测。 服务端有数据库吧,加个表,存放用户信息每次用户登录的时候,把这些查出来返回给客户端这样就可以显示出来这些信息,可以在注册的时候获取,也可以在登录的时候客户端获取本地的MAC,IP地址 string hostname = Dns.GetHostName();IPAddress[] address = Dns.GetHostAddresses(hostname);IPEndPoint ipendpoint = new IPEndPoint(address[0], 1234);string IP = ipendpoint.Address.ToString(); socket通讯的例子很多都有lz的需求 你相当于是写个监听器!可以这样写!1.先开个端口接收客户端的 通过 TCP/IP 协议 传过来 SOCKET 的通信2. 建立该程序的缓存区等 /// <summary> /// 服务器程序使用的端口,默认为8888 /// </summary> /// <summary> /// 接收数据缓冲区大小64K /// </summary> /// <summary> /// 服务器端的监听器 /// </summary> /// <summary> /// 保存所有客户端会话的哈希表 /// </summary>3.序列化在线列表,向客户端返回序列化后的字节数组4./// <summary> /// 启动监听,轮询监听客户机请求并将客户端套接字存入转发表 /// </summary> public void StartUp() { IPAddress _ip = Dns.GetHostAddresses(Dns.GetHostName())[0]; _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]; Socket newClient = _tcpl.AcceptSocket(); newClient.Receive(packetBuff); 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)); } } } } 用Socket的话,客户端连接服务器的时候,服务器端侦听到连接后可以直接获得客户端的Socket,这里面就包含了IP和端口。用户名和密码的话自己扩展保存了。 客户端连接是通过连接服务端的IP和端口,所以服务端获取的SOCKET中的IP还是服务端的,并不能获取客户端的IP. Process类在webform中可以运行,但是在winform中却不可以运行 C# 多线程如何获得方法的执行结果呢?我用了静态变量也没有效果 C#调用dll问题。 高分求教!!!关于内存流问题。 那们高手帮小弟测试下.ajax控件的小事件,执行后时间不会动. ASPnetPagerV2netfx2_0的问题 求助,关于C# 伪静态路径等问题 excel的奇怪问题,请大家帮忙看看,在线 谁能用领先地位,先进的,代表最新技术的的c#写一个计算校验和(Checksum)的函数出来 C# chart控件折线图坐标问题 怎么做?是帅哥的就给点提示,不是就算了。 一个Substring的问题
每次用户登录的时候,把这些查出来返回给客户端
这样就可以显示出来
这些信息,可以在注册的时候获取,也可以在登录的时候客户端获取本地的MAC,IP地址
IPAddress[] address = Dns.GetHostAddresses(hostname);
IPEndPoint ipendpoint = new IPEndPoint(address[0], 1234);
string IP = ipendpoint.Address.ToString();
可以这样写!
1.先开个端口接收客户端的 通过 TCP/IP 协议 传过来 SOCKET 的通信
2. 建立该程序的缓存区等 /// <summary>
/// 服务器程序使用的端口,默认为8888
/// </summary> /// <summary>
/// 接收数据缓冲区大小64K
/// </summary> /// <summary>
/// 服务器端的监听器
/// </summary>
/// <summary>
/// 保存所有客户端会话的哈希表
/// </summary>
3.序列化在线列表,向客户端返回序列化后的字节数组
4./// <summary>
/// 启动监听,轮询监听客户机请求并将客户端套接字存入转发表
/// </summary>
public void StartUp()
{
IPAddress _ip = Dns.GetHostAddresses(Dns.GetHostName())[0];
_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];
Socket newClient = _tcpl.AcceptSocket();
newClient.Receive(packetBuff);
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));
}
}
}
}
用户名和密码的话自己扩展保存了。