置顶随笔

[置顶][开源]MiniChat Beta 1.0——局(广)域网多人聊天程序,支持文件传输

摘要: 一、作品简介:MiniChat是本人编写的一款多人聊天程序,主要用于局域网或广域网内用户间的实时通讯。用户界面美观友好,支持公共聊天、私人聊天、聊天记录、文件传输、任务栏实时通知等功能。该程序采用C/S三层架构,多线程Socket通信方式。Cient端采用TcpClient类连接服务器,使用NetworkStream传送数据。Server端采用TcpListener监听本地端口,并使用多线程为每个...阅读全文

posted @ 2008-05-15 20:05 seek 阅读(2079) 评论(13) 编辑

2010年12月15日

逆时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

例如:如果输入如下矩阵:

1              2              3              4
5              6              7              8
9              10           11           12
13           14           15           16

则依次打印出数字1 5 9 13 14 15 16 12 8 4 3 2 6 10 11 7


分析过程:思路比较简单,分为四个函数按顺序循环调用即可。

     分别是列递增,行递增,列递减,行递减。

     注意每次调用完函数后要将下个行/列总数减一。

代码如下:

代码
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 int[,] t = new int[4,4];
6 ArrayInput(t, 4, 4);
7 StdPrint(t);
8
9 ClockWisePrint(t);
10 }
11 /// <summary>
12 /// 记录当前行长度
13 /// </summary>
14   private static int CurrentRows = 0;
15 /// <summary>
16 /// 记录当前列长度
17 /// </summary>
18   private static int CurrentColums = 0;
19
20 static void ClockWisePrint(int[,]a)
21 {
22 CurrentRows = a.GetLength(0);
23 CurrentColums = a.GetLength(1);
24 ClockWiseColumnIncrease(a, 0, 0, CurrentRows);
25 }
26 /// <summary>
27 /// 列递增遍历
28 /// </summary>
29 /// <param name="a"></param>
30 /// <param name="startX"></param>
31 /// <param name="startY"></param>
32 /// <param name="length"></param>
33 static void ClockWiseColumnIncrease(int[,]a ,int startX,int startY, int length)
34 {
35 int n = 0;
36 for(n=0;n<length;n++)
37 {
38 Console.Write(a[startX + n, startY] + " ");
39 }
40 if (CurrentColums > 1)
41 {
42 ClockWiseRowIncrease(a, startX + n-1, startY + 1, --CurrentColums);
43 }
44 }
45 /// <summary>
46 /// 行递增遍历
47 /// </summary>
48 /// <param name="a"></param>
49 /// <param name="startX"></param>
50 /// <param name="startY"></param>
51 /// <param name="length"></param>
52 static void ClockWiseRowIncrease(int[,]a ,int startX,int startY, int length)
53 {
54 int i = 0;
55 for(i=0;i<length;i++)
56 {
57 Console.Write(a[startX, startY + i] + " ");
58 }
59 if (CurrentRows > 1)
60 {
61 ClockWiseColumnDecrease(a, startX - 1, startY + i-1, --CurrentRows);
62 }
63 }
64 /// <summary>
65 /// 列递减遍历
66 /// </summary>
67 /// <param name="a"></param>
68 /// <param name="startX"></param>
69 /// <param name="startY"></param>
70 /// <param name="length"></param>
71 static void ClockWiseColumnDecrease(int[,]a ,int startX,int startY, int length)
72 {
73 int i = 0;
74 for(i=0;i<length;i++)
75 {
76 Console.Write(a[startX - i, startY] + " ");
77 }
78 if (CurrentColums > 1)
79 {
80 ClockWiseRowDecrease(a, startX - i + 1, startY - 1, --CurrentColums);
81 }
82 }
83 /// <summary>
84 /// 行递减遍历
85 /// </summary>
86 /// <param name="a"></param>
87 /// <param name="startX"></param>
88 /// <param name="startY"></param>
89 /// <param name="length"></param>
90 static void ClockWiseRowDecrease(int[,]a ,int startX,int startY, int length)
91 {
92 int i = 0;
93 for(;i<length;i++)
94 {
95 Console.Write(a[startX, startY - i] + " ");
96 }
97 if (CurrentRows > 1)
98 {
99 ClockWiseColumnIncrease(a, startX + 1, startY - i + 1, --CurrentRows);
100 }
101 }
102 /// <summary>
103 /// 输入函数
104 /// </summary>
105 /// <param name="a"></param>
106 /// <param name="x"></param>
107 /// <param name="y"></param>
108 static void ArrayInput(int[,] a,int x,int y)
109 {
110 int n = 0;
111 for(int i=0;i<x;i++)
112 {
113 for (int j = 0; j < y; j++)
114 {
115 a[i, j] = ++n;
116 }
117 }
118
119 }
120 /// <summary>
121 /// 标准输出
122 /// </summary>
123 /// <param name="a"></param>
124 static void StdPrint(int[,]a)
125 {
126 for(int i=0;i<a.GetLength(0);i++)
127 {
128 for (int j=0;j<a.GetLength(1);j++)
129 {
130 Console.Write("\t" + a[i,j]);
131 }
132 Console.WriteLine();
133 }
134 }
135 }

 

posted @ 2010-12-15 22:54 seek 阅读(158) 评论(1) 编辑

2009年1月10日

考研=旷考

2009.01.10,平生第一次旷考,心里有太多的想法,很多的无奈。也都是自己咎由自取的结果。

发帖纪念一下这特殊的一天!

posted @ 2009-01-10 09:04 seek 阅读(149) 评论(0) 编辑

2008年7月25日

UsbSniffer---U盘资料窃取器(C#版)

     前段时间发布了个C++版本的UsbSniffer,虽然只是个示例程序,但是还是得到大家的广泛关注。一直说要把C#版本的sniffer发布,可是由于种种原因(主要是期末考试与微软的“校园之星”复赛),今天才发。对不住那些一直关注的朋友拉~~

--------------------------

     这个程序的主要思想和C++版本的一样,都是定时(默认5s)扫描系统磁盘,寻找可移动磁盘。然后递归复制目录文件,但是在复制文件的过程里改进了一些,先判断修改日期是否正常,然后再进行复制。该程序隐藏了界面,为了不被杀软暴毒,在系统托盘里注册了NotifyIcon,有其他需要的朋友自己修改。并且支持日志记录,ini文件读写等功能。好了,废话不多说了,开源才是硬道理!欢迎回复交流!

 

http://files.cnblogs.com/seek/YetAnotherSnifferU2.zip

 

posted @ 2008-07-25 23:29 seek 阅读(1105) 评论(8) 编辑

2008年7月14日

备战微软“校园之星”复赛……

N久没写随笔了,最近一段时间事情胡多——期末考试、考研班、微软校园之星复赛……

不过说起来最值得关注的应该就是校园之星复赛了。很幸运,上周五接到通知说已经成功晋级复赛现场,意味着7月22号在

成都复赛现场参赛,争夺决赛资格!N个通宵的努力总算没有白费,引一段提交项目后在校内上写的几段话:
引用
到目前为止本人已经连续31个小时未合眼了。从上个星期的这会起就没有清闲过。前两天的每天文挡编写到凌晨2点。从上周四开始到现在平均每天的睡眠时间不到2小时。连续3天呆宿舍编码,吃饭都不下楼。之后转移到机房干到现在。

   做什么呢?一个网络办公系统,1周时间出来,还要有详细说明,测试计划,用例及报告。不过值得庆幸的是4人团队中还是有一个能顶事的。当然其他人也都很配合很默契。最终共同完成了这个OA~~


今天又接到通知说后天开始的暑期实习我可以不参加,真是振奋人心啊!想想在学校实习能学个PP么,纯粹浪费时间。这次

准备外面租个房子,继续上政治辅导班到19号,然后回学校准备20号的起程!这段时间还要抽空再看看提交的OA,数据结

构等等。这次过去不拿到决赛参赛权绝不回来!预祝自己及所在团队取得成功!

posted @ 2008-07-14 22:35 seek 阅读(144) 评论(0) 编辑

2008年5月25日

[趣味编程]CPU占用率曲线听我指挥

写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:

1.    CPU的占用率固定在50%,为一条直线;

2.    CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);

3.    CPU的占用率状态是一个正弦曲线。
Google上搜索,可以找到第一题和第3题的C++描述。本人写了个C#版本的,主要用性能计数器
第一题代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;

namespace cpuControl
{
    
public partial class Form1 : Form
    
{
        
public Form1()
        
{
            InitializeComponent();
        }


        
private void btnOk_Click(object sender, EventArgs e)
        
{

            
if (float.TryParse(tbNum.Text, out num))
            
{
                Thread thread 
= new Thread(new ThreadStart(Start));
                thread.Start();
            }

            
else
            
{
                MessageBox.Show(
"Please enter legal num");
            }
 
            
        }

        
private void Start()
        
{
             
try
                
{
                    stop 
= false;
                    PerformanceCounter cpuCounter 
= new PerformanceCounter("Processor""% Processor Time""_Total");
                                        
while (!stop)
                    
{
                        
if (cpuCounter.NextValue() > num)
                        
{
                          
//15为时间片轮转时间   
                         Thread.Sleep(15);
                        }

                    }

                }

                
catch (Exception ex)
                
{
                    MessageBox.Show(ex.ToString());
                }

        }

        
float num = 0.0f;
        
bool stop;

        
private void btnStop_Click(object sender, EventArgs e)
        
{
            stop 
= true;
        }

    }

}


关于第2题,本人只实现了把CPU曲线控制在11%,13%,15%,18%,21%,25%,32%,47%,50%,100%这些直线上。用的还是性能计数器。不同点在于Start函数里把sleep的时间设置为变量(15的倍数)
 private void Start()
        
{
             
try
                
{
                    stop 
= false;
                    PerformanceCounter cpuCounter 
= new PerformanceCounter("Processor""% Processor Time""_Total");
                    
int temp = (int)num / 15;
                    temp 
= temp * 15;
                    
while (!stop)
                    
{
                        
if (cpuCounter.NextValue() > 5)
                        
{
                            Thread.Sleep(temp);
                        }

                    }

                }

                
catch (Exception ex)
                
{
                    MessageBox.Show(ex.ToString());
                }

        }

具体的控制在任何百分率直线还不能实现,希望哪为朋友有兴趣可以指点下本人!
第3题还是把人家的C++代码写出来好了。有兴趣的朋友可以转成C#版本的。
#include <math.h>
#include 
<stdlib.h>
#include 
<windows.h>
const double SPLIT=0.01;//windows调度的时间片大概是这个时间 
const int COUNT=200;
const double PI=3.14159265;
const int INTERVAL =300;//控制图像的跨度 
int main(int argc, char *argv[])
{
  DWORD busySpan[COUNT];
  DWORD idleSpan[COUNT];
  
int half =INTERVAL/2;
  
double radian =0.0;
  
int i;
  
for(i=0;i<COUNT;i++)
  
{
       busySpan[i]
=(DWORD)(half+(sin(PI*radian)*half));//函数图像上升的部分的跨度 
       idleSpan[i]=INTERVAL-busySpan[i];//下降部分的 
       radian+=SPLIT;//弧度增加 
       
  }

  DWORD startTime
=0;
  
int j=0;
  
//这段原理和上一个程序一样的 
  while(1)
  
{
     j
=j%COUNT;
     startTime 
= GetTickCount();
     
while((GetTickCount()-startTime)<=busySpan[j])
        ;
     Sleep(idleSpan[j]);
     j
++;
            
  }

  

  
return 0;
}

posted @ 2008-05-25 23:03 seek 阅读(3293) 评论(16) 编辑

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

思绪来去匆匆,偶尔在这里停留。

昵称:seek
园龄:4年5个月
粉丝:1
关注:2

搜索

 

常用链接

我的标签

随笔分类

随笔档案

文章分类

学习资料

积分与排名

  • 积分 - 16904
  • 排名 - 5855

最新评论

阅读排行榜

评论排行榜

推荐排行榜