BearOcean

Say HelloWorld
随笔 - 19, 文章 - 0, 评论 - 149, 引用 - 3
数据加载中……

局域网聊天工具FreeChat 1.0 开发日志

前天把Beta发出来了:http://bearocean.cnblogs.com/archive/2006/01/18/319310.html

现在的是1.0 点击可以下载所有的代码和可执行文件:/Files/BearOcean/FreeChat1.0.rar
由于是基于.Net的,所以仍需要FrameWork的支持.


之后又对FreeChat做了些改进,主要的改动如下:

增加了一个Config.只要写好一个XML文档,将内网内经常联系的电脑
按格式编辑进成员名单就可以,将该Xml文档与FreeChat.exe放在同一目录下.
以后都不用再编辑...只要在DropDownList中选中发送目标,直接发送就可以.
XML文档格式如下:

 

<?xml version="1.0"?>
<FreeChatRoot>
  
<Memebers>
    
<Member MemberName="BearOcean" State="Unknown" IpAddress="192.168.1.103" ComputerName="f94cdbcaa8d4441">
    
</Member>
    
<Member MemberName="BoLi" State="Unknown" IpAddress="192.168.0.208" ComputerName="WUYING">
    
</Member>
    
<Member MemberName="XuKe" State="Unknown" IpAddress="192.168.0.73" ComputerName="DA_MING">
    
</Member>
  
</Memebers>
  
<Configs>
    
<RecordPath>
    
</RecordPath>
  
</Configs>
</FreeChatRoot>

这只是一个范例,例如我常与计算机192.168.1.123联系,我知道该计算机名为Seller那么只需要在<Memebers>下新增一行:
<Member  MemberName="Seller" State="Unknown" IpAddress="192.168.1.123" ComputerName="Seller">
</Member>

对Send按钮添加了快捷键Ctrl+Enter(向QQ学的)

最小化后自动隐藏到任务栏,双击后复原,并且有消息发到会自动弹出(和QQ一样)          

原代码就不贴出来了,因为会Post很久,但仍然可以在开始位置下载项目文件和可执行文件.

还有很多功能没有补全,明天继续写: )

posted on 2006-01-19 21:09 BearOcean 阅读(2873) 评论(20)  编辑 收藏 所属分类: .NET

评论

#1楼    回复  引用    

GOOD! Continue!
2006-01-19 22:18 | fengshaw [未注册用户]

#2楼    回复  引用  查看    

关注....
2006-01-19 23:42 | torome      

#3楼    回复  引用  查看    

继续努力
2006-01-19 23:55 | 碧海蓝天      

#4楼    回复  引用  查看    

继续努力
2006-01-20 08:37 | rexsp      

#5楼    回复  引用  查看    

支持一下!

提个小意见:界面可以再漂亮一点:)
2006-01-20 08:37 | Terrylee      

#6楼    回复  引用    

我需要p2p 的一些东西...作者升级吧..
2006-01-20 08:44 | lovebanyi [未注册用户]

#7楼    回复  引用    

关注中,还有什么想法吗?
2006-01-20 08:59 | 高祥 [未注册用户]

#8楼    回复  引用    

希望继续开发,并能提供如下功能:
1.可群发信息;
2.可加密发送信息;
3.可传送文件;
4.可换皮肤;
5.消息到达时有语音提示
2006-01-20 11:15 | aspsir [未注册用户]

#9楼    回复  引用  查看    

刚刚用了一下,发现了点问题,请教一下。
1)为什么读取Config.Xml的时候不使用XmlDocument呢?XmlTextReader好像不能读取使用UTF8编写的XML呀。
2)楼主好像是通过机器名查找目标机器的,但是我这里怎么也找不到,于是我改用IP查找就可以了。我这里局域网是使用Domain的,有没有关系呢。
3)目标机器返回的信息,楼主是在WorkerProc函数里面显示内容的吧。由于WorkerProc函数是一个新的Thread,在我这里执行到RtxInfo.AppendText(strRemoteName);语句的时候,就报错。由于rtxInfo不是定义在线程函数内部的,所以不能跨线程访问。据我所知好像应该用Control的异步委托实现的。

还希望楼主能够解答一下,谢了。
PS:我是使用VB2005重新编译的,有可能是2003 -> 2005的问题。
2006-01-20 11:39 | 妖居      

#10楼    回复  引用  查看    

下面的代码是我针对上面 3)作的修改,用了一点点异步委托的东西。

i)加了成员变量
private string sRemoteName, sMsg;

ii)加了个函数
private void ShowRtxInfo(object sender, System.EventArgs e)
{
RtxInfo.AppendText(sRemoteName);
RtxInfo.AppendText(":");
RtxInfo.AppendText("\n");
RtxInfo.AppendText(sMsg);
RtxInfo.AppendText("\n");

RtxInfo.Focus();
RtxInfo.ScrollToCaret();
}

iii)WorkerProc函数里面有点修改。
sRemoteName = strRemoteName;
sMsg = strMsg;
BeginInvoke(new EventHandler (ShowRtxInfo),new object[] {
this,
new EventArgs()});

//RtxInfo.AppendText(strRemoteName);
//RtxInfo.AppendText(":");
//RtxInfo.AppendText("\n");
//RtxInfo.AppendText(strMsg);
//RtxInfo.AppendText("\n");

//RtxInfo.Focus();
//RtxInfo.ScrollToCaret();
2006-01-20 11:48 | 妖居      

#11楼    回复  引用  查看    

另外发现程序关闭的时候,Accept()这句话出Exception了。
在Exit里面把Thread.Abort了,就好了。

说了这么多,楼主别介意…… ^_^
2006-01-20 11:51 | 妖居      

#12楼 [楼主]   回复  引用  查看    

Re妖居:
哈哈,当然不会介意:)
还要感谢您的建议.
关于您提出来的各种问题,我可以做如下的解释:
(1)使用XmlTextReader确实不能用Utf8,这样就不能支持中文了..所以我将在以后改用XmlDocument.

(2)关于用机器名或者用IP,因为使用的是Dns.Resolve()实际上它可以支持IP也可以支持Name.但是Xml解析的时候使用的是ComputerName属性.所以在ComputerName里面填写IPAddress也是可以找到的.IPAddress属性暂时还没有使用.

(3)是的,WorkProc实际上是在一个Thread里面执行的,但是您提出的异常,我在测试的时候并没有发现.但是您所说的也是有可能发生的,您对代码的改进,我会在新的改进中使用.其实我不知道新的Thread里面无法访问到上级控件,关于Control的异步委托
我会去查阅.非常感激您的帮助:)

(4)关于Accept()的异常问题,实际上在Exit按钮中我调用了Dispose()
代码如下:
private void BtExit_Click(object sender, System.EventArgs e)
{
this.Dispose(true);
}
#endregion


打算在Dispose中加上Thread.Abort来关闭线程,不知道这样行吗:)

总之,非常感谢各位,你们给了我非常用的信息:)
2006-01-20 21:37 | BearOcean      

#13楼 [楼主]   回复  引用  查看    

Re:aspsir
您所说的正是我下一步的计划:)

除了皮肤....这个我不大会:)

谢谢
2006-01-20 21:43 | BearOcean      

#14楼    回复  引用  查看    

请问你这个是C/S架构的,还是p2p架构的
2006-01-21 09:19 | Tony Qu      

#15楼 [楼主]   回复  引用  查看    

这个东西目前的设计思想是Server与Client绑定在一起.没有中央索引服务器的支持.在平行网络中允许多台机器互相传递消息。

之所以不加入中央服务器的原因是一般来说,索引服务器需要配置数据库来支持.虽然在服务器上维护列表将一定程度上增强功能,但是肯定会增加软件的复杂度.与做他的初衷就不相符合了.
只是希望直接就能用在公司,或者局域网内,用完就可以删除.
现在的网络应用p2p和C/S已经没有明确的划分,很多软件只能说宏观上C/S微观上是P2P或者相反...
而这个...我也不知道算哪一类.确实的说就是在初试话的时候监听一个特定的端口.同时又允许发送消息的简单应用罢了.
2006-01-21 10:59 | BearOcean      

#16楼    回复  引用    

感谢 学习你的Sockets 方式,

我刚做了个通过数据库中转的 聊天,
用的是 线程+XML+SQLserver2000
2006-01-21 13:24 | mkimtaehee [未注册用户]

#17楼    回复  引用    

我如此 解决 此问题的
昨天才解决好

线程方法
{
where()
{try
{}
catch(System.Threading.ThreadAbortException err)
{
//此异常解决线程关闭问题。解决软件关闭后进程不消失的问题。
}

}



关闭方法
this.thWriteMsg.Abort();
2006-01-21 13:32 | mkimtaehee [未注册用户]

#18楼 [楼主]   回复  引用  查看    

Re:妖居

(1)为什么读取Config.Xml的时候不使用XmlDocument呢?XmlTextReader好像不能读取使用UTF8编写的XML呀。

关于XmlDocument和XmlTextReader的区别,我去查了一下.
好象都能支持utf8并没有您说的问题.
而且我使用了XmlDocument直接Load一个xml也无法支持utf8..但是GB2312又都可以.现在问题不明...

xmlDocument与XmlTextReader的最大区别好象是XmlDocument是直接Load整个Xml,而XmlTextReader是顺序读入,而且是只读的.

关于这个,希望了解的人出来说一下:)
2006-01-22 16:18 | BearOcean      

#19楼    回复  引用    

Bug


// msMsg.Close();
}while(msMsg.Length<iMsgRealSize);
msMsg.Close();
2006-01-24 16:21 | mkimtaehee [未注册用户]

#20楼    回复  引用  查看    

可以对QQ群发信息吗?期待。。。
2006-05-15 22:49 | 浓浓的咖啡猫      

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-01-19 21:15 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: