7-1 网络编程技术(下)-2

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

7-3-4 编写聊天程序

聊天程序有很多,比如QQ,MSN等。聊天程序的发展从一开始的传送文字信息到传送文件,语音、图像不断升级,从本质上说都是使用相同协议传送数据,只不过数据格式有所不同。投入应用的聊天软件同时在线聊天的人数较多,发送消息需分辨接收者,同时确定消息边界。

1 案例学习:聊天程序

u 实验步骤(1):
创建服务端控制台应用程序ChatServer。先启动服务,在服务器端开始监听,接收从客户端的连接请求建立连接,并显示当前在线人数。
u 实验步骤(2):
    运行启动服务器,显示服务器地址和端口,监听来自客户端的连接,修改源代码:
HashTable clientTable = new HashTable();
IPAddress ip = Dns.GetHostAddresses(Dns.GetHostName())[0];
TcpListener listener = new TcpListener(ip, port);
listener.Start();
Console.WriteLine(" 服务器已启动,正在监听...\n");
Console.WriteLine(string.Format(" 服务器IP{0}\t端口号:{1}\n", ip, port));
while (true)
{
byte[] packetBuff = new byte[maxSize];
Socket newClient = listener.AcceptSocket();
newClient.Receive(packetBuff);
string userName = Encoding.Unicode.GetString(packetBuff).TrimEnd('\0');
// 验证是否为唯一用户
if (clientTable.Count != 0 && clientTable.ContainsKey(userName))
{
newClient.Send(Encoding.Unicode.GetBytes("Failed"));
continue;
}
else
{
newClient.Send(Encoding.Unicode.GetBytes("Successful"));
}
// 将新连接加入转发表并创建线程为其服务
clientTable.Add(userName, newClient);
string strlog = string.Format("[ 系统消息]新用户 {0}  {1} 已连接... 当前在线人数: {2}\r\n\r\n", userName, DateTime.Now, clientTable.Count);
Console.WriteLine(strlog);
 
Thread th = new Thread(new ParameterizedThreadStart(ThreadFunc));
th.Start(userName);
// 向所有客户机发送系统消息
foreach (DictionaryEntry de in clientTable)
{
string clientName = de.Key as string;
Socket clientSkt = de.Value as Socket;
if (!clientName.Equals(userName))
{
clientSkt.Send(Encoding.Unicode.GetBytes(strlog));
}
}
}
u 实验步骤(3):
  创建客户端应用程序ChatClient,添加文本框和按钮,界面布局同前面的例子类似,不同的是可以选择接收者即所谓的“私聊”。
u 实验步骤(4):
    至少同时打开两个客户端连接服务器,添加代码:
string msg = txtMsg.Text.Trim();
string strSend = null;
string strReceiver = txtReceiver.Text;
if (strReceiver == string.Empty)
{
MessageBox.Show(" 请选择一个接收者!\n如果没有接受者可选,表明当前只有您一个人在线\t",
" 发送消息",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
   strLocal = string.Format(" 您在 {0}  {1} 说:\r\n{2}\r\n ", DateTime.Now, strReceiver, msg);
strSend  = string.Format("{0}   {1} 对您说:\r\n{2}\r\n ", username, DateTime.Now, msg);
// 发送接受者用户名
netstream.Write(Encoding.Unicode.GetBytes(strReceiver), 0, Encoding.Default.GetBytes(strReceiver).Length);
}
netstream.Write(Encoding.Unicode.GetBytes(strSend), 0, Encoding.Default.GetBytes(strSend).Length);
 
rtbChat.AppendText(strLocal);
txtMsg.Clear();
这里指定聊天对象,将对方的用户名同发送的信息一起写入网络流,接收时需取出用户名,发送指定信息。
问题讨论: 发送信息时将用户名写入网络流,接收时如何取出?
u 实验步骤(5):
发送广播信息,即对所有用户发送信息,不区分接收者,添加代码:
String msg=txtMsg.Text.Trim();
if (rbBroadcast.Checked)
{
strLocal = string.Format("[ 广播]您在 {0} 对所有人说:\r\n{1}\r\n ", DateTime.Now, msg);
strSend = string.Format("[ 广播]{0}  {1} 对所有人说:\r\n{2}\r\n ", username, DateTime.Now, msg);
// 发送广播请求
netstream.Write(new byte[] { 0, 5 }, 0, 2);
}
netstream.Write(Encoding.Unicode.GetBytes(strSend), 0, Encoding.Unicode.GetBytes(strSend).Length);
 
rtbChat.AppendText(strLocal);
txtMsg.Clear();
比较发送广播消息和指定用户消息的不同。

7-4  本章小结

n  .NET Framework对于网络编程的支持。
n  主要Http网络编程类。
n  主要Tcp网络编程类。
n  使用协议通信的基本方法。
 
 
 
课 后 练 习
1、   使用DNS类和IPHostEntry类创建一个域名解析器。用户输入主机名或者DNS域名以后,能在下面的列表框中显示与主机或者DNS域名对应的IP地址和别名。
要求:
(1) 添加两个文本框用于输入主机名或者IP地址。
(2) 列表框用于显示与输入相对应的地址或别名。
2、   编写一个聊天软件,添加自定义表情,添加好友列表等
  要求:可以传输文件
3、   试使用Tcp相关类编写一个网络五子棋游戏。
 




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/231846,如需转载请自行联系原作者

目录
相关文章
|
18天前
|
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
46 11
动态IP代理技术详解及网络性能优化
动态IP代理技术通过灵活更换IP地址,广泛应用于数据采集、网络安全测试等领域。本文详细解析其工作原理,涵盖HTTP、SOCKS代理及代理池的实现方法,并提供代码示例。同时探讨配置动态代理IP后如何通过智能调度、负载均衡、优化协议选择等方式提升网络性能,确保高效稳定的网络访问。
29 2
利用AI技术提升网络安全防御能力
【10月更文挑战第42天】随着人工智能技术的不断发展,其在网络安全领域的应用也日益广泛。本文将探讨如何利用AI技术提升网络安全防御能力,包括异常行为检测、恶意软件识别以及网络攻击预测等方面。通过实际案例和代码示例,我们将展示AI技术在网络安全防御中的潜力和优势。
网络安全词云图与技术浅谈
### 网络安全词云图与技术浅谈 本文介绍了通过词云图展示网络安全关键术语的方法,并探讨了构建现代网络安全体系的关键要素。词云图利用字体大小和颜色突出高频词汇,如恶意软件、防火墙、入侵检测系统等。文中提供了生成词云图的Python代码示例,包括安装依赖库和调整参数。此外,文章详细讨论了恶意软件防护、加密技术、身份验证、DDoS防御、社会工程学防范及威胁情报等核心技术,强调了多层次、多维度的安全策略的重要性。
49 11
网络安全词云图与技术浅谈
云计算与网络安全:技术融合的双刃剑
在数字化浪潮中,云计算如同一股不可阻挡的力量,推动着企业和个人用户步入一个高效、便捷的新时代。然而,随之而来的网络安全问题也如影随形,成为制约云计算发展的阿喀琉斯之踵。本文将探讨云计算服务中的网络安全挑战,揭示信息保护的重要性,并提供实用的安全策略,旨在为读者呈现一场技术与安全的较量,同时指出如何在享受云服务带来的便利的同时,确保数据的安全和隐私。
27 6
NIST(美国国家标准与技术研究院)在网络安全领域进行了多项创新
NIST(美国国家标准与技术研究院)在网络安全领域进行了多项创新
52 10
云计算与网络安全:技术融合与挑战
在数字化时代的浪潮中,云计算和网络安全已成为推动社会进步的两大关键技术。本文将探讨云计算服务的发展,网络安全的重要性,以及信息安全技术的演进。我们将通过实例分析,揭示云服务如何增强数据保护,网络安全措施如何应对新兴威胁,以及信息安全技术的创新如何为企业带来竞争优势。文章旨在为读者提供对云计算和网络安全领域的深入理解,并展示它们如何共同塑造我们的未来。
云计算与网络安全:技术挑战与解决方案
随着云计算技术的飞速发展,其在各行各业的应用越来越广泛。然而,随之而来的网络安全问题也日益凸显。本文将从云服务、网络安全和信息安全等技术领域出发,探讨云计算面临的安全挑战及相应的解决方案。通过实例分析和代码示例,旨在帮助读者更好地理解云计算与网络安全的关系,提高网络安全防护意识。
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
随着云计算技术的飞速发展,越来越多的企业和个人开始使用云服务。然而,云计算的广泛应用也带来了一系列网络安全问题。本文将从云服务、网络安全、信息安全等方面探讨云计算与网络安全的关系,分析当前面临的挑战,并提出相应的解决方案。
63 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等