UDP和TCP网络实验报告.docx
- 文档编号:29964805
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:15
- 大小:29.52KB
UDP和TCP网络实验报告.docx
《UDP和TCP网络实验报告.docx》由会员分享,可在线阅读,更多相关《UDP和TCP网络实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
UDP和TCP网络实验报告
西安理工大学高科学院
TCP\UDP程序开发
实验报告
姓名:
专业:
信息系统与信息管理
班级:
学号:
日期:
1:
实验题目:
基于UDP\TCP的聊天程序开发
2:
实验目的:
开发TCP\UDP协议应用程序,掌握网络应用程序的工作原理。
通过本实验,深入理解TCP和UDP协议的异同点,了解网络协议的工作过程,学会网络通讯编程的基本方法,能够编制网络应用程序。
3.实验报告内容:
(实验程序与注解如下)
namespaceChatClient
{
usingSystem;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Threading;
usingSystem.Text;
publicclassClass1
{
//UDPClient对象
privatestaticUdpClientm_Client;
//本地和远程端口
privatestaticintLocalPort=8080;
privatestaticintRemotePort=8080;
//本地主机名称
privatestaticstringm_szHostName;
//广播组地址
privatestaticIPAddressm_GroupAddress;
//远程广播组端
privatestaticIPEndPointm_RemoteEP;
//跟踪用户是否退出程序
privatestaticboolm_Done=false;
//显示使用方法
publicstaticvoidUsage()
{
Console.WriteLine("UDPMulticastChatUtility");
Console.WriteLine("\nUsage:
");
Console.WriteLine("chat.exe");
}
publicstaticvoidInitialize()
{
//初始化UDPClient对象
m_Client=newUdpClient(LocalPort);
//创建多目标广播组对象
m_GroupAddress=IPAddress.Broadcast;
//加入组
m_Client.JoinMulticastGroup(m_GroupAddress);
//创建远程广播组端
m_RemoteEP=newIPEndPoint(m_GroupAddress,RemotePort);
}
publicstaticvoidTerminate()
{
//退出广播组
m_Client.DropMulticastGroup(m_GroupAddress);
}
publicstaticvoidListener()
{
//确保主线程开始接受用户输入
Thread.Sleep(2000);
//ASCII编码
EncodingASCII=Encoding.ASCII;
//循环中不断接受数据
while(!
m_Done)
{
IPEndPointendpoint=null;
//接受数据
Byte[]data=m_Client.Receive(refendpoint);
//得到数据的ASCII字符串形式
StringstrData=ASCII.GetString(data);
//如果包含:
@
if(strData.IndexOf(":
@")>0)
{
//先检查这个结束消息是否来自主线程还是来自其他聊天客户
Char[]separators={':
'};
String[]vars=strData.Split(separators);
//如果是本地机器
if(vars[0]==m_szHostName)
{
//结束线程
Console.WriteLine("shuttingdownListenerthread...");
//在这种情况下主线程已经把m_Done设为true,
//这里为了保险起见,再次设置m_Done为true
m_Done=true;
}
else
{
//显示消息,某个聊天客户已经离开
Console.WriteLine("{0}haslefttheconversation",vars[0]);
}
}
else
{
//如果这是一条聊天消息,则检查是否来自
//本地机器,如果不是,则显示这条消息
if(strData.IndexOf(":
")>0)
{
Char[]separators={':
'};
String[]vars=strData.Split(separators);
if(vars[0]!
=m_szHostName)
{
Console.WriteLine(strData);
}
}
}
}
Console.WriteLine("Listenerthreadfinished...");
return;
}
publicstaticintMain(String[]args)
{
if(args.Length>0)
{
//显示使用方法信息
Usage();
return1;
}
//得到主机名称和地址
//m_szHostName=Dns.GetHostName();IT超人
m_szHostName="127.0.0.1";
//初始化
Console.WriteLine("Initializing...");
Initialize();
//开始监听线程
Console.WriteLine("StartingListenerthread...");
Threadt=newThread(newThreadStart(Listener));
t.Start();
//发送数据使用的缓冲区
Byte[]buffer=null;
//编码格式
EncodingASCII=Encoding.ASCII;
//记录用户是否按下“@”键
boolm_ShuttingDown=false;
//循环语句中读取用户的输入并发送消息
while(!
m_ShuttingDown)
{
Strings=Console.ReadLine();
//没有输入继续循环
if(s.Length==0)
continue;
//如果第一个字母为@,则推出循环
if(String.Compare(s,0,"@",0,1)==0)
{
//停止监听线程中的循环
m_Done=true;
//向其他客户发送结束消息
s=m_szHostName+":
@";
m_ShuttingDown=true;
}
else
{
s=m_szHostName+":
"+s;
}
//分配发送缓冲区空间
buffer=newByte[s.Length+1];
//把字符串内容以ASCII编码格式放入发送缓冲区中
intlen=ASCII.GetBytes(s.ToCharArray(),0,s.Length,buffer,0);
//发送消息
intecode=m_Client.Send(buffer,len,m_RemoteEP);
//发送失败
if(ecode<=0)
{
Console.WriteLine("Errorinsend:
"+ecode);
}
}
//结束监听线程
t.Abort();
t.Join();
namespaceChatClient
{
usingSystem;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Threading;
usingSystem.Text;
publicclassClass1
{
//UDPClient对象
privatestaticUdpClientm_Client;
//本地和远程端口
privatestaticintLocalPort=8080;
privatestaticintRemotePort=8080;
//本地主机名称
privatestaticstringm_szHostName;
//广播组地址
privatestaticIPAddressm_GroupAddress;
//远程广播组端
privatestaticIPEndPointm_RemoteEP;
//跟踪用户是否退出程序
privatestaticboolm_Done=false;
//显示使用方法
publicstaticvoidUsage()
{
Console.WriteLine("UDPMulticastChatUtility");
Console.WriteLine("\nUsage:
");
Console.WriteLine("chat.exe");
}
publicstaticvoidInitialize()
{
//初始化UDPClient对象
m_Client=newUdpClient(LocalPort);
//创建多目标广播组对象
m_GroupAddress=IPAddress.Broadcast;
//加入组
m_Client.JoinMulticastGroup(m_GroupAddress);
//创建远程广播组端
m_RemoteEP=newIPEndPoint(m_GroupAddress,RemotePort);
}
publicstaticvoidTerminate()
{
//退出广播组
m_Client.DropMulticastGroup(m_GroupAddress);
}
publicstaticvoidListener()
{
//确保主线程接受用户输入
Thread.Sleep(2000);
//ASCII编码
EncodingASCII=Encoding.ASCII;
//循环中不断接受数据
while(!
m_Done)
{
IPEndPointendpoint=null;
//接受数据
Byte[]data=m_Client.Receive(refendpoint);
//得到数据的ASCII字符串
StringstrData=ASCII.GetString(data);
//如果包含:
@
if(strData.IndexOf(":
@")>0)
{
//先检查这个结束消息是否来自主线程还是来自其他聊天客户
Char[]separators={':
'};
String[]vars=strData.Split(separators);
//如果是本地机器
if(vars[0]==m_szHostName)
{
//结束线程
Console.WriteLine("shuttingdownListenerthread...");
//在这种情况下主线程已经把m_Done设为true,
//这里为了保险起见,再次设置m_Done为true
m_Done=true;
}
else
{
//显示消息,某个客户已下线
Console.WriteLine("{0}haslefttheconversation",vars[0]);
}
}
else
{
//如果这是一条聊天消息,则检查是否来自
//本地机器,如果不是,则显示这条消息
if(strData.IndexOf(":
")>0)
{
Char[]separators={':
'};
String[]vars=strData.Split(separators);
if(vars[0]!
=m_szHostName)
{
Console.WriteLine(strData);
}
}
}
}
Console.WriteLine("Listenerthreadfinished...");
return;
}
publicstaticintMain(String[]args)
{
if(args.Length>0)
{
//显示使用方法信息
Usage();
return1;
}
//得到主机名称和地址
//m_szHostName=Dns.GetHostName();123
m_szHostName="127.0.0.1";
//初始化
Console.WriteLine("Initializing...");
Initialize();
//开始监听
Console.WriteLine("StartingListenerthread...");
Threadt=newThread(newThreadStart(Listener));
t.Start();
//发送数据使用的缓冲区
Byte[]buffer=null;
//编码格式
EncodingASCII=Encoding.ASCII;
//记录用户是否按下“@”键
boolm_ShuttingDown=false;
//循环语句中读取用户的输入并发送消息
while(!
m_ShuttingDown)
{
Strings=Console.ReadLine();
//没有输入继续循环
if(s.Length==0)
continue;
//如果第一个字母为@,则推出循环
if(String.Compare(s,0,"@",0,1)==0)
{
//停止监听线程中的循环
m_Done=true;
//向其他客户发送结束消息
s=m_szHostName+":
@";
m_ShuttingDown=true;
}
else
{
s=m_szHostName+":
"+s;
}
//分配发送缓冲区空间
buffer=newByte[s.Length+1];
intlen=ASCII.GetBytes(s.ToCharArray(),0,s.Length,buffer,0);
//发送
intecode=m_Client.Send(buffer,len,m_RemoteEP);
//发送失败
if(ecode<=0)
{
Console.WriteLine("Errorinsend:
"+ecode);
}
}
//结束监听
t.Abort();
t.Join();
//中断连接
Console.WriteLine("Closingconnection...");
Terminate();
return0;
}
}
}
程序结束
4系统测试:
通过单机和联机状态下的实验,本程序基本达到了实验目的的要求。
完成了网络中的简单通讯,实现了对UDO\TCP熟练运用的目的。
5设计的总结和体会:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UDP TCP 网络 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)