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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 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,如需转载请自行联系原作者

目录
相关文章
|
8天前
|
存储 安全 网络安全
云计算与网络安全:技术融合下的挑战与机遇
【10月更文挑战第9天】在数字时代,云计算和网络安全是推动企业创新和保护资产的两大支柱。本文将探讨云计算服务如何影响网络安全策略,并分析信息安全在云环境中的重要性。我们将通过实际案例来揭示云服务带来的安全挑战,同时展示如何利用最新的安全技术来增强防护。文章旨在为读者提供深入的洞见,帮助他们在享受云计算便利的同时,有效规避潜在的安全风险。
21 1
|
3天前
|
移动开发 网络协议 NoSQL
不为人知的网络编程(十七):冰山之下,一次网络请求背后的技术秘密
本文将抛弃千篇一律的计网知识理论,从现实的互联网技术实践角度,一步步为你分享一次网络请求背后的技术秘密。
15 0
|
9天前
|
存储 安全 网络安全
云计算与网络安全:技术挑战与应对策略
【10月更文挑战第8天】随着云计算技术的飞速发展,越来越多的企业和个人开始将数据和应用迁移到云端。然而,这也带来了一系列网络安全问题。本文将探讨云计算环境下的网络安全挑战,并提出相应的应对策略。我们将从云服务模型、网络安全威胁、信息安全技术等方面进行分析,并通过代码示例展示如何实现安全措施。
|
6天前
|
安全 定位技术 数据安全/隐私保护
|
11天前
|
运维 定位技术 网络虚拟化
|
2天前
|
人工智能 关系型数据库 数据中心
2024 OCP全球峰会:阿里云为代表的中国企业,引领全球AI网络合作和技术创新
今年的OCP(Open Compute Project)峰会于2024年10月14日至17日在美国加州圣何塞举行,在这场全球瞩目的盛会上,以阿里云为代表的中国企业,展示了他们在AI网络架构、液冷技术、SRv6和广域网等前沿领域的强大创新能力,持续引领全球合作与技术创新。
|
3天前
|
机器学习/深度学习 编解码 人工智能
技术前沿探索:生成对抗网络(GANs)的革新之路
【10月更文挑战第14天】技术前沿探索:生成对抗网络(GANs)的革新之路
10 2
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
神经网络技术
【10月更文挑战第14天】神经网络技术
|
3天前
|
机器学习/深度学习 编解码 人工智能
技术前沿探索:生成对抗网络(GANs)的革新之路
【10月更文挑战第14天】技术前沿探索:生成对抗网络(GANs)的革新之路
17 1
|
8天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
【10月更文挑战第9天】在数字化转型的浪潮中,云计算成为企业和个人不可或缺的技术支撑。然而,随之而来的网络安全问题也日益凸显。本文将深入探讨云计算环境下的网络安全挑战,分析云服务模式对信息安全的影响,并提出相应的防护措施。通过案例分析,我们将揭示如何在享受云计算带来的便利的同时,确保数据安全和隐私保护。