| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9845 人关注过本帖
标题:C#心跳包测试是否在线
只看楼主 加入收藏
jjhc0522
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2012-1-12
结帖率:60%
收藏
已结贴  问题点数:65 回复次数:11 
C#心跳包测试是否在线
最近课设要写一个局域网的聊天软件,这个心跳包不会写,每隔一段时间发送一个心跳包,用来测试用户还在线,请教一下这个怎么写啊
搜索更多相关主题的帖子: 局域网 聊天软件 在线 用户 
2013-07-06 13:13
afdoa83
Rank: 4
等 级:业余侠客
威 望:7
帖 子:43
专家分:262
注 册:2012-7-31
收藏
得分:10 
思路: 客户端间隔一段时间就要向服务端发送数据,比如发一个字符串"在线"。服务端返回验证信息,比如返回一个字符串"确认"。
      如果服务端长时间得不到客户端发来的验证信息,就判断为离线。  
2013-07-06 13:34
jjhc0522
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2012-1-12
收藏
得分:0 
回复 2楼 afdoa83
我知道是这个思路,其实。。。。其实。。。。我是不会写,原谅我的愚昧
2013-07-06 13:41
afdoa83
Rank: 4
等 级:业余侠客
威 望:7
帖 子:43
专家分:262
注 册:2012-7-31
收藏
得分:25 
using System;
using System.Text;
using
using
//服务端
class S
{
  static void Main()
  {
    //缓存
    const int BSize = 8192;
    Console.WriteLine("服务端");
    //设ip和端口
    IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
    TcpListener list = new TcpListener(ip, 8800);

    listener.Start();  //开始侦听
    Console.WriteLine("开始侦听");
    TcpClient TC = list.AcceptTcpClient();
    // 获得流
    NetworkStream NS = TC.GetStream();
    byte[] BString = new byte[BSize];
    int bytesRead = NS.Read(BString, 0, BSize);
    Console.WriteLine("字节:{0} bytes ...", bytesRead);
    // 获得请求的字符串
    string msg = Encoding.Unicode.GetString(BString, 0, bytesRead);
    Console.WriteLine("收到:{0}", msg);
    //退出Q
    Console.WriteLine("\n\n输入\"Q\"键退出。");
    ConsoleKey key;
    do
    {
      key = Console.ReadKey(true).Key;
    } while (key != ConsoleKey.Q);
  }
}
;=====================================================================================
using System;
using System.Text;
using
using
//客户端
class C
{
  static void Main()
  {
    Console.WriteLine("客务端");
    TcpClient cline;
    // 与服务器连接
    try
    {
      cline = new TcpClient();
      cline.Connect("localhost", 8800);
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
      return;
    }
   
    string msg = "\"其实我在潜水,请不要抛弃我\"";
    //发往服务器
    NetworkStream streamToServer = client.GetStream();
    byte[] BString = Encoding.Unicode.GetBytes(msg);
    streamToServer.Write(BString, 0, BString.Length);
    Console.WriteLine("发送:{0}", msg);
    //退出Q
    Console.WriteLine("\n\n输入\"Q\"键退出。");
    ConsoleKey key;
    do
    {
      key = Console.ReadKey(true).Key;
    } while (key != ConsoleKey.Q);
  }
}
;================================================================================
以上是很经典的同步方式(只显示一次)
还有一些是异步方式,比较麻烦,自己找资料吧

[ 本帖最后由 afdoa83 于 2013-7-6 15:23 编辑 ]
2013-07-06 14:57
jjhc0522
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2012-1-12
收藏
得分:0 
回复 4楼 afdoa83
谢谢啊,我不常来,没有回复所以就没有分了,不好意思
2013-07-06 20:57
QJlin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:186
专家分:560
注 册:2013-5-18
收藏
得分:5 
就一个TCP的通信问题,客户端和服务器之间的通信!

慢慢前进走,不求一步登天,只求慢慢前进
2013-07-06 20:59
jjhc0522
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2012-1-12
收藏
得分:0 
回复 6楼 QJlin
嗯哪,新手新手之新新手啊,完全不会。。。。没有办法
2013-07-06 21:00
QJlin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:186
专家分:560
注 册:2013-5-18
收藏
得分:25 
C# Socket编程完成控制台服务器端和web客户端(调试通过)
服务器端程序

using System;
using
using
using System.Text;
namespace SocketServer
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  //定义端口号
  private const int porNum=81;
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
   bool done=false;
   TcpListener listener=new TcpListener(porNum);
   listener.Start();
   while(!done){
   Console.Write("正在侦听81端口...");
    TcpClient client=listener.AcceptTcpClient();
    Console.WriteLine("\n处理连接请求...");
    NetworkStream ns=client.GetStream();
    //ns.Read(,0,);
    byte[] bytes=new byte[1024];
    int bytesRead=ns.Read(bytes,0,bytes.Length);
    Console.WriteLine(Encoding.BigEndianUnicode.GetString(bytes,0,bytesRead));
    byte[] byteTime=Encoding.ASCII.GetBytes(DateTime.Now.ToString());
    try
    {
     ns.Write(byteTime,0,byteTime.Length);
     ns.Close();
     client.Close();
    }
    catch(Exception ex){
    Console.WriteLine(ex.ToString());
    }
   }
   listener.Stop();
  }
}
}

Web客户端

添加命名空间:
using
using
using System.Text;

连接代码:
private void socketButton_Click(object sender, System.EventArgs e)
  {//连接服务器程式
   try
   {
    //开始连接
    TcpClient client=new TcpClient("192.168.0.100",81);
    NetworkStream ns=client.GetStream();
    byte[] byteTime=Encoding.BigEndianUnicode.GetBytes("客户端数据提交\n");
    ns.Write(byteTime,0,byteTime.Length);
    //返回客户端信息
    byte[] clientIp=Encoding.BigEndianUnicode.GetBytes("客户端IP地址:"+Request.UserHostAddress+"\n");
    ns.Write(clientIp,0,clientIp.Length);
    byte[] bytes=new byte[1024];
    int bytesRead=ns.Read(bytes,0,bytes.Length);
    showLabel.Text="服务器返回信息"+Encoding.ASCII.GetString(bytes,0,bytesRead);
    client.Close();
   }
   catch(Exception ex)
   {
    showLabel.Text="抛出异常"+ex.ToString();
   }
   finally{}
  }
参考下,根据自己要求改!

慢慢前进走,不求一步登天,只求慢慢前进
2013-07-06 21:00
jjhc0522
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2012-1-12
收藏
得分:0 
回复 8楼 QJlin
我写的只有客户端的 没有服务器的,请问怎么修改呢
2013-07-06 21:16
jjhc0522
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2012-1-12
收藏
得分:0 
回复 8楼 QJlin
我基础特别差希望注释的清楚点啦,谢谢 啊
2013-07-06 21:18
快速回复:C#心跳包测试是否在线
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027122 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved