UDP和TCP网络实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安理工大学高科学院
TCP\UDP程序开发
实验报告
姓名:
专业:信息系统与信息管理
班级:
学号:
日期:
1:实验题目:基于UDP\TCP的聊天程序开发
2:实验目的:
开发TCP\UDP协议应用程序,掌握网络应用程序的工作原理。通过本实验,深入理解TCP和UDP协议的异同点,了解网络协议的工作过程,学会网络通讯编程的基本方法,能够编制网络应用程序。
3.实验报告内容:
(实验程序与注解如下)
namespace ChatClient
{
using System;
using ;
using .Sockets;
using System.Threading;
using System.Text;
public class Class1
{
//UDPClient对象
private static UdpClient m_Client;
//本地和远程端口
private static int LocalPort = 8080;
private static int RemotePort = 8080;
//本地主机名称
private static string m_szHostName;
//广播组地址
private static IPAddress m_GroupAddress;
//远程广播组端
private static IPEndPoint m_RemoteEP;
//跟踪用户是否退出程序
private static bool m_Done = false;
//显示使用方法
public static void Usage()
{
Console.WriteLine("UDP Multicast Chat Utility");
Console.WriteLine("\nUsage:");
Console.WriteLine("chat.exe");
}
public static void Initialize()
{
//初始化UDPClient对象
m_Client = new UdpClient(LocalPort);
//创建多目标广播组对象
m_GroupAddress = IPAddress.Broadcast;
//加入组
m_Client.JoinMulticastGroup(m_GroupAddress);
//创建远程广播组端
m_RemoteEP = new IPEndPoint( m_GroupAddress, RemotePort); }
public static void Terminate()
{
//退出广播组
m_Client.DropMulticastGroup(m_GroupAddress);
}
public static void Listener()
{
//确保主线程开始接受用户输入
Thread.Sleep(2000);
//ASCII编码
Encoding ASCII = Encoding.ASCII;
//循环中不断接受数据
while(!m_Done)
{
IPEndPoint endpoint = null;
//接受数据
Byte[] data = m_Client.Receive(ref endpoint);
//得到数据的ASCII字符串形式
String strData = ASCII.GetString(data);
//如果包含:@
if( strData.IndexOf(":@") > 0 )
{
//先检查这个结束消息是否来自主线程还是来自其他聊天客户
Char [] separators = {':'};
String [] vars = strData.Split(separators);
//如果是本地机器
if( vars[0] == m_szHostName )
{
//结束线程
Console.WriteLine("shutting down Listener thread...");
//在这种情况下主线程已经把m_Done设为true,
//这里为了保险起见,再次设置m_Done为true
m_Done = true;
}
else
{
//显示消息,某个聊天客户已经离开
Console.WriteLine("{0} has left the conversation", vars[0]); }
}
else
{
//如果这是一条聊天消息,则检查是否来自
//本地机器,如果不是,则显示这条消息
if(strData.IndexOf(":") > 0)
{
Char [] separators = {':'};
String [] vars = strData.Split(separators);
if( vars[0] != m_szHostName )
{
Console.WriteLine(strData);
}
}
}
}
Console.WriteLine("Listener thread finished...");
return;
}
public static int Main( String [] args )
{
if( args.Length > 0 )
{
//显示使用方法信息
Usage();
return 1;
}
//得到主机名称和地址
//m_szHostName = Dns.GetHostName(); IT超人
m_szHostName = "127.0.0.1";
//初始化
Console.WriteLine("Initializing...");
Initialize();