我在做聊天室
---------服务器端-----------
udpClient.Send(bys, bys.Length, msgArray[1], ipPort);//发送消息内容()--参数是,(数组,数组的长度,发送给某个ip地址,端口号)
udpClient.Send(getSer(dic), getSer(dic).Length, ipPoint);//在服务器上 将所有在线用户的ip和端口号 发送给每一个用户...---这是在服务器的一个 序列化的方法----
/// <summary>
/// 序列化成字节数组
/// </summary>
/// <param name="dic">字符数组</param>
/// <returns></returns>
private byte[] getSer(Dictionary<IPAddress, int> dic)
{
IFormatter ifor = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
ifor.Serialize(ms, dic);
return ms.ToArray();
}---------请问我在客户端应该怎么接收呢-------
rec = udpClient.Receive(ref ipPoint);//如果我这样接收的话,那就把所有的都接收过来了,可是我是想内容接收放一起, 服务器发送过来的ip 放在一起,请大家帮帮我,我在线等 ,如果会的兄弟方便的话,加我QQ好吗?(411123129)谢谢..
---------服务器端-----------
udpClient.Send(bys, bys.Length, msgArray[1], ipPort);//发送消息内容()--参数是,(数组,数组的长度,发送给某个ip地址,端口号)
udpClient.Send(getSer(dic), getSer(dic).Length, ipPoint);//在服务器上 将所有在线用户的ip和端口号 发送给每一个用户...---这是在服务器的一个 序列化的方法----
/// <summary>
/// 序列化成字节数组
/// </summary>
/// <param name="dic">字符数组</param>
/// <returns></returns>
private byte[] getSer(Dictionary<IPAddress, int> dic)
{
IFormatter ifor = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
ifor.Serialize(ms, dic);
return ms.ToArray();
}---------请问我在客户端应该怎么接收呢-------
rec = udpClient.Receive(ref ipPoint);//如果我这样接收的话,那就把所有的都接收过来了,可是我是想内容接收放一起, 服务器发送过来的ip 放在一起,请大家帮帮我,我在线等 ,如果会的兄弟方便的话,加我QQ好吗?(411123129)谢谢..
udpClient.Send(bys, bys.Length, msgArray[1], ipPort);//发送消息内容()--参数是,(数组,数组的长度,发送给某个ip地址,端口号)
udpClient.Send(getSer(dic), getSer(dic).Length, ipPoint);//在服务器上 将所有在线用户的ip和端口号 发送给每一个用户...那应该怎么接收呢.......
public static void ReceiveFile(object obj)
{
while (true)
{
clientSock = receiveSock.Accept();
Console.WriteLine("{0} 已与服务端Socket连接成功...", DateTime.Now.ToString("yy-MM-dd HH:mm:ss:mss"));
while (true)
{
try
{
byte[] clientData = new byte[1024 * 5000];
int receivedBytesLen = clientSock.Receive(clientData);
int fileNameLen = BitConverter.ToInt32(clientData, 0);
int modelLen = BitConverter.ToInt32(clientData, 4); string fileName = Encoding.UTF8.GetString(clientData, 8, fileNameLen); byte[] mmsModelByte = new byte[modelLen];
int modelLenStart = 8 + fileNameLen;
for (int i = 0; i < modelLen; i++)
{
mmsModelByte[i] = clientData[modelLenStart + i];
} BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream(mmsModelByte);
T_colormessage_set mmsFile = (T_colormessage_set)formatter.Deserialize(stream);
if (mmsFile == null)
{
throw new Exception("转为实体T_colormessage_set失败!");
}
if (!System.IO.File.Exists(fileName))
{
BinaryWriter bWrite = new BinaryWriter(File.Open(msgPathprefix + fileName, FileMode.Create));
bWrite.Write(clientData, 8 + fileNameLen + modelLen, receivedBytesLen - 8 - fileNameLen - modelLen);
bWrite.Close();
} if (msgBLl.Update(mmsFile) > 0)
{
Console.WriteLine("{0} 文件{1}接收成功!", DateTime.Now.ToString("yy-MM-dd HH:mm:ss:mss"), mmsFile.file_name);
}
else
{
Console.WriteLine("{0} 文件{1}接收失败!", DateTime.Now.ToString("yy-MM-dd HH:mm:ss:mss"), mmsFile.file_name);
EventsLog.Log.Error(string.Format("{0} 文件{1}接收失败!", DateTime.Now.ToString("yy-MM-dd HH:mm:ss:mss"), mmsFile.file_name));
EventsLog.Log.Error(mmsFile.ToString());
} }
catch (Exception ex)
{
Console.WriteLine("客户端接收文件出错或服务端Socket已关闭,关闭Socket");
EventsLog.Log.Error("客户端接收文件出错或服务端Socket已关闭,关闭Socket");
Console.WriteLine();
EventsLog.Log.Error(ex.Message);
EventsLog.Log.Error(ex.StackTrace);
clientSock.Close();
clientSock = null;
break;
}
}
}
} public static void SendFile(object source, System.Timers.ElapsedEventArgs e)
{
try
{
T_file_fj fileModel = fileBLL.GetOneModel();
if (fileModel == null)
{
return;
}
string fileName;
if (fileModel.file_path.ToLower().EndsWith(".wav"))
{
fileName = soundPathProfix + fileModel.file_path;
}
else
{
fileName = oldFilePathProfix + fileModel.file_path;
}
if (!System.IO.File.Exists(fileName))
{
Console.WriteLine("{0} 客户端要发送的文件不存在,要发送的文件为:{1}", DateTime.Now.ToString("yy-MM-dd HH:mm:ss:mss"), fileName);
throw new Exception(string.Format("{0} 客户端要发送的文件不存在,要发送的文件为:{1}", DateTime.Now.ToString("yy-MM-dd HH:mm:ss:mss"),fileName));
}
string filePath = string.Empty; fileName = fileName.Replace("\\", "/");
while (fileName.IndexOf("/") > -1)
{
filePath += fileName.Substring(0, fileName.IndexOf("/") + 1);
fileName = fileName.Substring(fileName.IndexOf("/") + 1);
} //byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);
byte[] fileNameByte = Encoding.UTF8.GetBytes(fileName);
if (fileNameByte.Length > 850 * 1024)
{
Console.WriteLine("File size is more than 850kb, please try with small file.");
EventsLog.Log.Error("File size is more than 850kb, please try with small file.");
return;
}
byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); byte[] fileData = File.ReadAllBytes(filePath + fileName); fileModel.upload_flag = "1";
MemoryStream stream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, fileModel);
stream.Flush();
byte[] modelData = stream.ToArray();
byte[] modelLen = BitConverter.GetBytes(modelData.Length); byte[] clientData = new byte[8 + fileNameByte.Length + modelData.Length + fileData.Length]; fileNameLen.CopyTo(clientData, 0);
modelLen.CopyTo(clientData, 4);
fileNameByte.CopyTo(clientData, 8);
modelData.CopyTo(clientData, 8 + fileNameByte.Length);
fileData.CopyTo(clientData, 8 + fileNameByte.Length + modelData.Length); sendSock.Send(clientData);
Console.WriteLine("{0} 客户端文件:{1}发送成功!", DateTime.Now.ToString("yy-MM-dd HH:mm:ss:mss"), fileName);
}
catch (Exception ex)
{
Console.WriteLine("客户端发送文件出错");
EventsLog.Log.Error("客户器端发送文件出错");
EventsLog.Log.Error(ex.Message);
if ("远程主机强迫关闭了一个现有的连接。".EndsWith(ex.Message))
{
if (senderTimer != null)
{
Console.WriteLine();
Console.WriteLine();
EventsLog.Log.Error("客户端接收文件的Socket已关闭");
Console.WriteLine();
Console.WriteLine();
senderTimer.Close();
}
}
EventsLog.Log.Error(ex.StackTrace);
}
}你设置一个数组,记录下哪几位记录什么,解释的时候先取出哪几位到哪几位记录什么内容,再解释出来