namespace ChatClient
{
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text; public class Class1
{
//UDPClient?象
private static UdpClient m_Client;
private static UdpClient m_ClientRecive;
private static string m_hostIp; //本地和?程端口
private static int RemotePort = 9999;
//本地主机名称
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();
m_ClientRecive=new UdpClient(RemotePort); //主机IP
m_hostIp =(Dns.GetHostByName (Dns.GetHostName() )).AddressList[0].ToString(); //?建多目?广播??象
m_GroupAddress = IPAddress.Broadcast;
//m_GroupAddress = IPAddress.Parse (m_hostIp); //?建?程广播?端
//m_RemoteEP = new IPEndPoint( m_GroupAddress, RemotePort);
m_RemoteEP = new IPEndPoint(m_GroupAddress, RemotePort);
//加入?
//m_Client.JoinMulticastGroup(m_GroupAddress);
} public static void Terminate()
{
//退出广播?
m_ClientRecive.DropMulticastGroup(IPAddress.Parse (m_hostIp));
} public static void Listener()
{
//?保主?程?始接受用??入
Thread.Sleep(2000);
//ASCII??
Encoding ASCII = Encoding.ASCII; m_ClientRecive.JoinMulticastGroup(IPAddress.Parse (m_hostIp));
//循?中不断接受数据
while(!m_Done)
{
//加入?
IPEndPoint endpoint = null;
//接受数据
Byte[] data = m_ClientRecive.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("..........");
//在??情况下主?程已?把m_Done??true,
//?里?了保?起?,再次?置m_Done?true
m_Done = true;
}
else
{
//?示消息,某个聊天客?已???
Console.WriteLine("【システム】:{0} 離れた",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 )
{
Initialize();
if( args.Length > 0 )
{
//?示使用方法信息
Usage();
return 1;
}
//得到主机名称和地址
m_szHostName = Dns.GetHostName();
//m_szHostName ="wangcs";
//初始化
Console.WriteLine("■ver 1.0 作成 aaa ■ ホスト:ポート「9999」 アドレス「"+ m_hostIp+"」" );
Console.WriteLine("------------------------------------------------------------------------------");
Console.WriteLine("注 :'@' 押下して、システム退出\n");
Console.WriteLine("起動しました...\n");
//?始?听?程
Thread t = new Thread(new ThreadStart(Listener));
t.Start();
//?送数据使用的?冲区
Byte [] buffer = null;
//??格式
Encoding ASCII = Encoding.ASCII;
//??用?是否按下“@”?
bool m_ShuttingDown = false;
//循??句中?取用?的?入并?送消息
while(!m_ShuttingDown)
{
String s = 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 = new Byte[s.Length + 1];
//把字符串内容以ASCII??格式放入?送?冲区中
int len = ASCII.GetBytes( s.ToCharArray(), 0, s.Length, buffer, 0);
//?送消息
int ecode = m_Client.Send(buffer, len, m_RemoteEP);
//?送失?
if(ecode <= 0)
{
Console.WriteLine("エラー : " + ecode);
}
}
//?束?听?程
t.Abort();
t.Join();
//中断和广播?的?接
Console.WriteLine("閉め中...");
Terminate();
return 0;
}
}
}
{
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text; public class Class1
{
//UDPClient?象
private static UdpClient m_Client;
private static UdpClient m_ClientRecive;
private static string m_hostIp; //本地和?程端口
private static int RemotePort = 9999;
//本地主机名称
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();
m_ClientRecive=new UdpClient(RemotePort); //主机IP
m_hostIp =(Dns.GetHostByName (Dns.GetHostName() )).AddressList[0].ToString(); //?建多目?广播??象
m_GroupAddress = IPAddress.Broadcast;
//m_GroupAddress = IPAddress.Parse (m_hostIp); //?建?程广播?端
//m_RemoteEP = new IPEndPoint( m_GroupAddress, RemotePort);
m_RemoteEP = new IPEndPoint(m_GroupAddress, RemotePort);
//加入?
//m_Client.JoinMulticastGroup(m_GroupAddress);
} public static void Terminate()
{
//退出广播?
m_ClientRecive.DropMulticastGroup(IPAddress.Parse (m_hostIp));
} public static void Listener()
{
//?保主?程?始接受用??入
Thread.Sleep(2000);
//ASCII??
Encoding ASCII = Encoding.ASCII; m_ClientRecive.JoinMulticastGroup(IPAddress.Parse (m_hostIp));
//循?中不断接受数据
while(!m_Done)
{
//加入?
IPEndPoint endpoint = null;
//接受数据
Byte[] data = m_ClientRecive.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("..........");
//在??情况下主?程已?把m_Done??true,
//?里?了保?起?,再次?置m_Done?true
m_Done = true;
}
else
{
//?示消息,某个聊天客?已???
Console.WriteLine("【システム】:{0} 離れた",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 )
{
Initialize();
if( args.Length > 0 )
{
//?示使用方法信息
Usage();
return 1;
}
//得到主机名称和地址
m_szHostName = Dns.GetHostName();
//m_szHostName ="wangcs";
//初始化
Console.WriteLine("■ver 1.0 作成 aaa ■ ホスト:ポート「9999」 アドレス「"+ m_hostIp+"」" );
Console.WriteLine("------------------------------------------------------------------------------");
Console.WriteLine("注 :'@' 押下して、システム退出\n");
Console.WriteLine("起動しました...\n");
//?始?听?程
Thread t = new Thread(new ThreadStart(Listener));
t.Start();
//?送数据使用的?冲区
Byte [] buffer = null;
//??格式
Encoding ASCII = Encoding.ASCII;
//??用?是否按下“@”?
bool m_ShuttingDown = false;
//循??句中?取用?的?入并?送消息
while(!m_ShuttingDown)
{
String s = 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 = new Byte[s.Length + 1];
//把字符串内容以ASCII??格式放入?送?冲区中
int len = ASCII.GetBytes( s.ToCharArray(), 0, s.Length, buffer, 0);
//?送消息
int ecode = m_Client.Send(buffer, len, m_RemoteEP);
//?送失?
if(ecode <= 0)
{
Console.WriteLine("エラー : " + ecode);
}
}
//?束?听?程
t.Abort();
t.Join();
//中断和广播?的?接
Console.WriteLine("閉め中...");
Terminate();
return 0;
}
}
}
解决方案 »
- c#datagridView显示问题
- udp如何将IList发送到客户端
- C#.net 2005 WEB开发遇到的模板字段事件不响应的问题。有分捉虫。
- 急!!!!!!!!快
- 梦之星 谢谢你帮我解决问题,进来拿分,100分闲少的话我可再开贴
- 用C#怎样做一个像QQ界面的样式。。大家帮我提点建议。。
- 谁有,csdn三楼楼长提供的精品OA下载(25M,包括完整的源程序、文档及数据库),我下的怎么没有右边的菜单,只是文字!
- 我的分页控件是aspnetpager,可是出现问题了
- C#+sql数据库编程人员pc配置调查
- Quartz初始化任务调度失败
- C# 写的 类似 QQ 的 聊天程序 源码
- 讨论下 怎么用C#做个qq聊天工具
有兴趣的朋友可以试试看。不需要建立服务器!!!名称:EasyMessenger
版本:2006 第2版主要功能介绍:
点对点私聊
多人群聊
自定义表情
发送网络图片
即时传送文件
历史记录保存有需要的朋友可以来信,可以自己定义需要的群组。下载页面:
http://www.easymessenger.cn