社区
VB
帖子详情
各位资深的.NET专家帮帮忙!谢谢。急急急!!!
tianneer
2005-04-15 09:33:18
我是一大四学生。现在正用VB.NET做毕业设计(很菜的鸟)。急需找一个类似于QQ聊天程序的C/S结构的源代码做参考。请各位帮帮忙,大恩不言谢。
...全文
82
4
打赏
收藏
各位资深的.NET专家帮帮忙!谢谢。急急急!!!
我是一大四学生。现在正用VB.NET做毕业设计(很菜的鸟)。急需找一个类似于QQ聊天程序的C/S结构的源代码做参考。请各位帮帮忙,大恩不言谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fantiny
2005-04-15
打赏
举报
回复
支持一下, 建议楼主多利用搜索先。
hamadou
2005-04-15
打赏
举报
回复
[转]
P2P技术简介
P2P,英文Peer-to-Peer的缩写,中译为对等互联或点对点技术。P2P技术可以让用户可以直接连接到其他用户的计算机,进行文件共享与交换,同时P2P在深度搜索、分布计算、协同工作等方面也大有用途。
简单地说,P2P就是一种用于不同PC用户之间,不经过中继设备直接交换数据或服务的技术,它允许Internet用户直接使用对方的文件。每个人可以直接连接到其他用户的计算机,并进行文件的交换,而不需要连接到服务器上再进行浏览与下载。
目前Internet的存储模式是"内容位于中心",而P2P技术的运用将使Internet上的内容向边缘移动。这将带来以下改变:
首先,客户不再需要将文件上传到服务器,而只需要使用P2P与其他计算机进行共享;
其次,使用P2P技术的计算机不需要固定的IP地址和永久的Internet连接,这使得占有极大比例的拨号上网用户也可以享受P2P带来的变革。
实例介绍
理解P2P技术的最好方法莫过于仔细观察并理解一个实际的P2P应用程序。C#作为微软.Net战略的重要棋子,对网络编程提供了很好的支持和优化。本文就通过一个程序,向大家介绍一下C#下的P2P编程的方法和实现机理。本文的这个程序不是很有用,但却很直观地给出了P2P(点对点)编程以及套接口编程的一些基本知识和概念。它是建立在TcpListener以及TcpClient这两个类基础上的。程序实现的原理也比较简单,但是用到了P2P技术重返"非中心化"的基本原则。简言之,用这个程序可以在网络中发送、接受消息,任何一台计算机既可以作为服务器端,又可以作为客户端。
系统要求:
1.Widows 2000服务器版操作系统或后续版本的操作系统。
2.Visual Studio.net Framework正式版。
具体方法:
首先,打开VS.net,新建一个C#项目(注意:模板为Windows应用程序),不妨命名为"P2Pchat"。图示如下:
其次,参照ICQ、OICQ等聊天工具,我们可以将程序的主界面布置成和常见聊天工具的消息发送对话框类似的布局。不过由于程序仅一个主界面,所以还要添加一些诸如"开始监听"、"停止监听"等控制按钮。同时,程序是支持昵称显示的。于是,按照这个思想,我们可以开始布置程序的主界面了。首先,往主界面上拖放如下一些控件:两个Label控件、三个Button控件、三个TextBox控件、一个RichTextBox控件以及一个StatusBar控件。
各个控件的属性设置如下表所示:
Form1 Text属性 P2P聊天工具
Label1 Text属性 目标计算机地址:
TestSlign属性 MiddleCenter
Label2 Text属性 昵称:
TextAlign属性 MiddleCenter
Button1 Text属性 开始监听
FlatStyle属性 Flat
Button2 Text属性 停止监听
FlatStyle属性 Flat
Enabled属性 False
Anchor属性 Top, Right
Button3 Text属性 发送消息
FlatStyle属性 Flat
Anchor属性 Top, Right
TextBox1 Text属性 (空)
Anchor属性 Top, Left, Right
TextBox2 Text属性 (空)
Multiline属性 True
Anchor属性 Top, Left, Right
TextBox3 Text属性 (空)
ForeColor属性 Firebrick
Anchor属性 Top, Left, Right
RichTextBox1 Text属性 (空)
ForeColor属性 Steelblue
ReadOnly属性 True
Anchor属性 Top, Bottom, Left, Right
注:其中的Anchor属性是设置窗体上控件布局用的,当窗体大小改变后各个控件如何在窗体上重新分布由该属性决定,读者可参考更详细的介绍文章来理解。
其他属性为默认即可,最终布置主窗体界面如下所示:
现在到了程序的主体部分,即代码部分。在给出代码之前,我想先向大家介绍一下实现的基本原理以及其中的一些逻辑关系。
首先,程序运行后,用户得先按下“开始监听”按钮,按钮相应事件后,程序就进入了监听状态,状态栏有相应的显示。这样,本机就相当于“服务器/客户机”模式中的服务器了,其他计算机可以连接到本机并向本机发送消息。其他计算机通过该程序连接到本机是通过IP地址来实现的,C#对网络编程有很好的支持,所以程序员的工作量是比较小的。如此,一台计算机可以向另一台发送消息了。然而,这是个P2P程序,所以只要另一台计算机的用户也按下"开始监听"按钮,那台计算机也成了这台计算机的服务器了。于是就实现了消息互发功能,然而真正的服务器是不存在的,每台计算机都是服务器,每台计算机同时也是客户机,这就体现了P2P技术的"非中心化"原则。
程序主要用到了一个Listen()函数和一个Send()函数。前者实现程序的监听功能,函数实现如下:
private void Listen(){ try
{
tcpl = new TcpListener(5656);
tcpl.Start();
statusBar1.Text = "正在监听...";
while(listenerRun)
{
Socket s = tcpl.AcceptSocket();
Byte[] stream = new Byte[80];
int i=s.Receive(stream) ;
string message =
System.Text.Encoding.UTF8.GetString(stream);
richTextBox1.AppendText(message);
}
}
catch(System.Security.SecurityException)
{
MessageBox.Show("防火墙安全错误!","错误",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
catch(Exception)
{
statusBar1.Text = "已停止监听!";
}
}
函数的主体是一个try-catch语句,try部分又是一个while循环,这表示只要用户不按"停止监听"按钮,程序就会一直处于监听状态。监听的端口是5656,这个端口是可以自己定义的,只要不跟常用的端口混淆就行了。一旦程序接收到远程计算机的一条消息,就将该消息添加到消息显示框中(消息显示框就是那个RichTextBox控件)。函数的catch部分是捕捉一些异常用的,如用户之间设置了防火墙,就不能彼此通讯了,或是对方已经停止监听了,那当然就不能向它发送消息了。另一个函数Send()是实现程序发送消息的功能的。函数实现如下:
private void Send()
{
try
{
string msg = "<"+textBox3.Text+">"+textBox2.Text;
TcpClient tcpc = new TcpClient(textBox1.Text, 5656);
NetworkStream tcpStream = tcpc.GetStream();
StreamWriter reqStreamW = new StreamWriter(tcpStream);
reqStreamW.Write(msg);
reqStreamW.Flush();
tcpStream.Close();
tcpc.Close();
richTextBox1.AppendText(msg);
textBox2.Clear();
}
catch(Exception)
{
statusBar1.Text = "目标计算机拒绝连接请求!";
}
}
该函数的主体部分也是一个try-catch语句,它先根据用户的输入,建立一个和远程计算机的连接,注意其端口也为5656,而且必须是5656,这是为了和接收方端口保持一致,这样对方才能收到这里发送的消息。接着,函数根据用户在消息输入框中的内容以及用户的昵称向远程计算机发送消息。这样,只要网络无故障、远程计算机已经处于监听状态,它就能接收到这里发送的消息了。当然,这里处于监听状态了,远程的计算机也可以自如地往这里发消息。函数的catch部分也是用于捕捉一些异常的。
同时还要注意的是,由于该程序用到了许多网络编程所需的对象以及输入输出对象,又运用了多线程编程机制,所以在程序的开始出得添加如下一些名字空间:
using System.IO;
using System.Net.Sockets;
using System.Threading;
最后,程序中各个控件的事件处理函数以及完整的代码请参看文后附带的源代码包。程序运行的图示如下:
现在一个很基本的P2P运用程序以及完成,通过它,我们可以利用P2P技术的基本特性实现点对点通信。通过这个程序,我相信大家对C#下的P2P编程应该有了大致的了解。对于这个程序,不足的一点是功能比较简单,只可以发送、接受信息,而且不能穿过防火墙进行通讯,读者可以试着开发出功能更强P2P应用程序。
总结
最后,笔者希望能通过此文唤起大家对P2P技术的兴趣。因为P2P身后所蕴藏着的无比的创造力使人们对未来互联网充满了美好的憧憬,现在世界范围的P2P应用热潮也是一浪高过一浪。在可以预见的未来,随着对P2P研究的进一步深入和关注P2P的群体逐渐增多,P2P必将进入一个飞速发展的新时期。然而国内的P2P起步得比较晚,所以更需要有大量的技术研究投入以及足够的重视以赢得更好的发展。在此,笔者希望国内的P2P能取得辉煌的发展。
daisy8675
2005-04-15
打赏
举报
回复
为什么要用VB。NET做?//VB做的一大把
huis
2005-04-15
打赏
举报
回复
好处
穷爸爸富爸爸
[穷爸爸富爸爸 / 罗伯特·T·清崎著] -----章节内容开始------ 第一卷 第一章 序言 这就是你所需要的学校真的让孩子们准备好应付真实的世界了吗? “努力学习,得到好成绩,你就能找到高薪并且伴有很多其他好处的职位。”我父母过去常这么对我说。他们的生活目标就是供我和姐姐上大学,觉得这样我们就有了在生活中获得成功的最好机会。1976年,当我从佛罗里达州立大学会计专...
《麦肯锡卓越工作方法》
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"><
硬盘和内存的故事
转自 csdn 网友
有哪些既美味又健康的食品适合健身和减肥爱好者?
Ashley Yu ,Eat Fit Love 张常绿、胭脂渗透、夏天聪 等人赞同 自己做健身餐一年了,越来越喜欢这种饮食模式,而且也喜欢研究尝试各种菜谱,把健身餐做的多样而且美味! 早餐系列 -水果烤燕麦 这个特别快手,把燕麦牛奶还有水果丢进去然后烤箱180度15分钟就能吃了! 我一般还会撒点奇异籽亚麻籽PB2之类。苹果/香蕉和肉桂粉很搭。喜欢咸口的可以把水果
来北京的那 1 年,我被动创业了 2 次!
一个有所追求的人。1写在前面我将用系列文章,回顾十年程序生涯,一方面是对职场生涯的阶段性总结,另一方面希望这些经历,对大家往后职场生涯有所启发。我很庆幸一路走来皆是自己的选择,虽然也走了...
VB
16,554
社区成员
110,527
社区内容
发帖
与我相关
我的任务
VB
VB技术相关讨论,主要为经典vb,即VB6.0
复制链接
扫一扫
分享
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章