添加新类 CheckOutIpPoint 类 获取IP和端口
public class CheckOutIpPoint
{
private string ipadd="";
private int ipport=0;
public string IpAdd
{ //ip
get
{
return(ipadd);
}
}
public int Port
{// 返回端口号,只读
get
{
return(ipport);
}
}
public CheckOutIpPoint(string IpEndPoint)
{
string ip="";
string port="";
bool go=false;
for(int i=0;i<IpEndPoint.Length;i++)
{
if(IpEndPoint[i]==':') //ip和端口号是用:隔开的
{
go=true;
continue;
}
if(!go)
{
ip+=IpEndPoint[i].ToString().Trim();
}
else
{
port+=IpEndPoint[i].ToString().Trim();
}
}
this.ipadd=ip;
this.ipport=Convert.ToInt32(port)-1;
}
}
添加新类CheckOutNum 获取QQ昵称和号码
public class CheckOutNum
{
private string[] parmer =new string[2]{"",""};
public string QQname
{ // 获取传进来的值的QQ昵称
get
{
return(parmer[0]);
}
}
public string QQnumber
{ // 获取传进来的值的QQ号码
get
{
return(parmer[1]);
}
}
public CheckOutNum(string NameAndNum)
{
for(int i=0;i<2;i++)
{
parmer[i]="";
}
int j=0;
for(int i=0;i
if(NameAndNum[i]=='(')
{
j=1;
continue;
}
if(NameAndNum[i]==')')
{
break;
}
parmer[j]+=NameAndNum[i].ToString().Trim();
}
}
}
添加新类 getSerInf 获取xml结点资料
using System;
using System.Xml;
using System.IO;
public class getSerInf
{
public getSerInf()
{
}
public static string ReadXmlNode(string XmlFileUrl,string Node)
{ //获取xml结点下的内容
if(File.Exists(XmlFileUrl))
{
XmlDocument SerInf=new XmlDocument();
SerInf.Load(XmlFileUrl);
XmlNode FirstNode=SerInf.SelectSingleNode(Node).FirstChild;
return(FirstNode.InnerText);
}
else
{
return("-1");
}
}
}
添加新类 Login类 检查登陆信息
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
public class Login
{
public Login()
{
}
public static bool QLogin(string uid,string pwd)
{// 登陆到服务器验证该用户名密码的用户是否为合法用户
string SerInfFile="SerInf\\SerInf.dat";
string StrIp=getSerInf.ReadXmlNode(SerInfFile,"//root//server//ip");
string StrPort=getSerInf.ReadXmlNode(SerInfFile,"//root//server//port");
int port=int.Parse(StrPort);
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(StrIp,port);
Stream stm = tcpclnt.GetStream();
UTF8Encoding asen = new UTF8Encoding();
byte[] ba = asen.GetBytes("1;" + uid +";"+ pwd);
stm.Write(ba, 0, ba.Length);
byte[] bb = new byte[1];
int k = stm.Read(bb, 0, 1);
string req = System.Text.Encoding.UTF8.GetString(bb);
stm.Close();
tcpclnt.Close();
if (req.Trim() == "1")
{
return(true);
}
else
{
return(false);
}
}
public static bool SendMsgToGetFriendInf(string UserNumber)
{// 向服务器发送请求以获取该用户的好友列表
StreamWriter FriendInf=new StreamWriter(UserNumber+"\\FriendInf.dat");
string SerInfFile="SerInf\\SerInf.dat";
string StrIp=getSerInf.ReadXmlNode(SerInfFile,"//root//server//ip");
string StrPort=getSerInf.ReadXmlNode(SerInfFile,"//root//server//port");
int port=int.Parse(StrPort);
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(StrIp,port);
Stream stm = tcpclnt.GetStream();
UTF8Encoding asen = new UTF8Encoding();
byte[] ba = asen.GetBytes("2;" + UserNumber);
stm.Write(ba, 0, ba.Length);
byte[] bb = new byte[1024];
int k = stm.Read(bb, 0, 1024);
while(k>0)
{
string Str=System.Text.UTF8Encoding.UTF8.GetString(bb,0,k);
Console.WriteLine(Str);
FriendInf.Write(Str);
k = stm.Read(bb, 0, 1024);
}
FriendInf.Close();
stm.Close();
tcpclnt.Close();
return(true);
}
public static bool SendMsgToGetOnlineInf()
{/// 发送获取所有在线用户列表的请求
while(!UserInf.iniOnlineInf())
{}
StreamWriter OnlineInf=new StreamWriter("online.dat");
string SerInfFile="SerInf\\SerInf.dat";
string StrIp=getSerInf.ReadXmlNode(SerInfFile,"//root//server//ip");
string StrPort=getSerInf.ReadXmlNode(SerInfFile,"//root//server//port");
int port=int.Parse(StrPort);
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(StrIp,port);
Stream stm = tcpclnt.GetStream();
UTF8Encoding asen = new UTF8Encoding();
byte[] ba = asen.GetBytes("6;");
stm.Write(ba, 0, ba.Length);
byte[] bb = new byte[1024];
int k = stm.Read(bb, 0, 1024);
while(k>0)
{
string Str=System.Text.UTF8Encoding.UTF8.GetString(bb,0,k);
OnlineInf.Write(Str);
k = stm.Read(bb, 0, 1024);
}
OnlineInf.Close();
stm.Close();
tcpclnt.Close();
return(true);
}
///
public static string AddFriend(string Owner,string Friend)
{// 向服务器发送请求!添加好友
string SerInfFile="SerInf\\SerInf.dat";
string StrIp=getSerInf.ReadXmlNode(SerInfFile,"//root//server//ip");
string StrPort=getSerInf.ReadXmlNode(SerInfFile,"//root//server//port");
int port=int.Parse(StrPort);
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(StrIp,port);
Stream stm = tcpclnt.GetStream();
UTF8Encoding asen = new UTF8Encoding();
byte[] ba = asen.GetBytes("7;" + Owner +";"+ Friend);
stm.Write(ba, 0, ba.Length);
byte[] bb = new byte[2];
int k = stm.Read(bb, 0, 2);
string req = System.Text.Encoding.UTF8.GetString(bb);
stm.Close();
tcpclnt.Close();
switch(req)
{
case "-1":
return("sorry!要添加的好友不存在!");
case "0\0":
return("恭喜!添加好友成功!请刷新");
case "1\0":
return("对不起!该好友在你的好友列表中!");
default:
return("未知错误!");
}
}
}
添加新类 PlaySound 系统声音类
using System;
using System.Runtime.InteropServices;
public class PlaySound
{
public PlaySound()
{
}
[DllImport("winmm.dll")] //使用音乐
private static extern long mciSendString(string strCommand, string strReturn, int iReturnLength, IntPtr hwndCallback);
private static void GetWavAndOpen(int SoundId)
{
string sFileName;
switch(SoundId)
{
case 1://系统消息
sFileName="sound\\System.wav";
break;
case 2://收到消息
sFileName="sound\\Msg.wav";
break;
case 3://功能切换
sFileName="sound\\Folder.wav";
break;
default:
sFileName="sound\\Call.wav";
break;
}
string sCommand = "open \"" + sFileName + "\" type mpegvideo alias MediaFile"; // MediaFile是选择播放文件类型
string ret = null;
mciSendString(sCommand, ret, 0, IntPtr.Zero);
}
public static void play(int SoundId)
{
StopPlay();
GetWavAndOpen(SoundId);
string sCommand = "play MediaFile";
string ret = null;
mciSendString(sCommand, ret, 0, IntPtr.Zero);
}
private static void StopPlay()
{
string sCommand = "close MediaFile";
string ret = null;
mciSendString(sCommand, ret, 0, IntPtr.Zero);
}
}
添加新类 Regx 验证数据类
using System;
using System.Text.RegularExpressions;
public class Regx
{
public Regx()
{
}
public static bool isNull(string str)
{// 验证数据是否为空
if(str.Trim()==""||str=="")
{
return(false);
}
else
{
return(true);
}
}
public static bool isNumber(string number)
{
Regex check=new Regex("\\d{8}");
if(check.IsMatch(number,0))
{
return(true);
}
else
{
return(false);
}
}
public static string CheckUserNumber(string number)
{
string temp="";
if(number.Length!=8)
{
for(int i=0;i<8-number.Length;i++)
{
temp+="0";
}
temp+=number;
}
else
{
temp=number;
}
return(temp);
}
}
添加新类 SendMessage 发送消息类
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Xml;
using System.IO;
using System.Text;
public class SendMessage
{
private string ToIpName="";
private string MSG="";
private string IpEndPoint="";
public SendMessage()
{
}
private bool result=true;
public bool Result
{// 获取发送消息的结果
get
{
return(result);
}
}
private string msg;
public string Msg
{// 需要发送的消息
get
{
return(msg);
}
set
{
msg=value;
}
}
private string ToWho;
public string ToDistUser
{// 目标用户
set
{
ToWho=value;
}
}
public void send()
{
Thread th=new Thread(new ThreadStart(MessageSend));
th.Start();
}
private void MessageSend()
{// 向指定用户发送消息
try
{
string TOIpNumber="";
CheckOutNum NAN=new CheckOutNum(ToWho);
this.ToIpName=NAN.QQname;
this.MSG=msg;
TOIpNumber=NAN.QQnumber;
XmlDataDocument Xml=new XmlDataDocument();
Xml.Load("online.dat");
XmlNode root=Xml.SelectSingleNode("root");
for(int i=0;i<root.ChildNodes.Count;i++)
{
if(root.ChildNodes[i].ChildNodes[0].InnerText.Trim()==TOIpNumber.Trim())
{
this.IpEndPoint=root.ChildNodes[i].ChildNodes[1].InnerText.Trim();
break;
}
}
CheckOutIpPoint IEP=new CheckOutIpPoint(IpEndPoint);
TcpClient Send=new TcpClient();
Send.Connect(IEP.IpAdd,5281);
Stream stm=Send.GetStream();
UTF8Encoding asen = new UTF8Encoding();
byte[] ba = asen.GetBytes("2;"+ShareDate.ThisUser.Trim()+";"+MSG);//参数格式为(标识;原用户;消息内容)
stm.Write(ba, 0, ba.Length);
Send.Close();
result=true;
}
catch
{
result=false;
}
}
}
添加新类 ShareDate 聊天窗口类
using System;
using System.Collections;
public class ShareDate
{
private static ArrayList winhand=new ArrayList();
// 用户保存当前聊天窗口的窗口句柄
public static ArrayList WinHand
{
get
{
return(winhand);
}
set
{
winhand=value;
}
}
private static ArrayList winname=new ArrayList();
// 用户保存当前存在的窗体名称,便于检索,和WinHand一一对应
public static ArrayList WinName
{
get
{
return(winname);
}
set
{
winname=value;
}
}
private static ArrayList msg=new ArrayList();
// 用于保存当前收到的消息!
public static ArrayList Msg
{
get
{
return(msg);
}
set
{
msg=value;
}
}
private static string thisuser;
// 用于保存当前登陆用户号码
public static string ThisUser
{
get
{
return(thisuser);
}
set
{
thisuser=value;
}
}
private static ArrayList qqnumber=new ArrayList();
// 保存当前用户的好友信息(号码)
public static ArrayList QQNumber
{
get
{
return(qqnumber);
}
set
{
qqnumber=value;
}
}
private static ArrayList qqname=new ArrayList();
//保存当前用户的好友信息(昵称)
public static ArrayList QQName
{
get
{
return(qqname);
}
set
{
qqname=value;
}
}
private static int mainformhand;
// 保存主窗体的句柄
public static int MainFormHand
{
get
{
return(mainformhand);
}
set
{
mainformhand=value;
}
}
public ShareDate()
{
}
}
添加TrafficMsg类 用于不同的窗体中发送消息
using System;
using System.Runtime.InteropServices;
public class TrafficMsg
{
public TrafficMsg()
{
}
// 提供Win32的消息发送,发送后等到处理完成然后返回
[DllImport("User32.dll",EntryPoint="SendMessage")]
public static extern int SendMessage(int hWnd,int Msg,int wParam,int lParam);
// 提供Win32的消息发送,发送后立即返回
[DllImport("User32.dll",EntryPoint="PostMessage")]
public static extern bool PostMessage(int hWnd,int Msg,int wParam,int lParam);
}
0 评论:
发表评论