客户端程序关键代码://客户端发送数据的代码,既发送XML字符,也发送图片,图片的大小<1M
public static void SendMessage(int Type, string fileName, byte[] Content)
{ if(socket == null)
throw new ArgumentNullException("连接不存在"); MyTreaty my = new MyTreaty(Type, fileName, Content); //对数据进行序列化
byte[] SendData = my.GetBytes(); int i = 0;
i = socket.Send(SendData,0, SendData.Length, SocketFlags.None);
}服务器程序的关键代码:服务器接受数据并把图片写入文件//接收客户端发送数据
public static string receive(Socket socket)
{
int DataCount = 0;
string result = null;
try
{
byte[] receData = new byte[BufferSize];
byte[] tempData = new byte[65535];
int offset = 0; do
{
DataCount = socket.Receive(tempData, 0, socket.Available, SocketFlags.None);
int j = 0;
for (int i = offset; i < offset + DataCount; i++,j++)
receData[i] = tempData[j]; offset += DataCount;
} while (DataCount >= 8192 || DataCount == 0); MyTreaty my = MyTreaty.GetMyTreaty(receData); //对接收到的数据进行反序列化 result = receiveData(my);
}
catch (Exception e)
{
return "";
} return result;
} private static string receiveData(MyTreaty AcceptData)
{
string result = "";
if (AcceptData.Type == 0)
{
result = Encoding.BigEndianUnicode.GetString(AcceptData.Content, 0,AcceptData.Content.Length);
}
else
{
if (!Directory.Exists("D:\\Pic\\"))
Directory.CreateDirectory("D:\\Pic\\");
if (File.Exists("D:\\Pic\\" + AcceptData.FileName))
return "";
MemoryStream ms = new MemoryStream(AcceptData.Content);
FileStream fs = new FileStream("D:\\Pic\\" + AcceptData.FileName, FileMode.OpenOrCreate, FileAccess.Write);
BinaryWriter ft = new BinaryWriter(fs);
ft.Write(ms.ToArray());
fs.Dispose();
fs.Close();
ms.Close();
result = "";
}
return result;
}问题在于接受完图片并且写入文件后,图片传输正确,但是在进行下一次socket接收数据的时候被阻塞,这是为什么,如何解决这个问题,希望有高手能回答,先说一声谢谢了。
public static void SendMessage(int Type, string fileName, byte[] Content)
{ if(socket == null)
throw new ArgumentNullException("连接不存在"); MyTreaty my = new MyTreaty(Type, fileName, Content); //对数据进行序列化
byte[] SendData = my.GetBytes(); int i = 0;
i = socket.Send(SendData,0, SendData.Length, SocketFlags.None);
}服务器程序的关键代码:服务器接受数据并把图片写入文件//接收客户端发送数据
public static string receive(Socket socket)
{
int DataCount = 0;
string result = null;
try
{
byte[] receData = new byte[BufferSize];
byte[] tempData = new byte[65535];
int offset = 0; do
{
DataCount = socket.Receive(tempData, 0, socket.Available, SocketFlags.None);
int j = 0;
for (int i = offset; i < offset + DataCount; i++,j++)
receData[i] = tempData[j]; offset += DataCount;
} while (DataCount >= 8192 || DataCount == 0); MyTreaty my = MyTreaty.GetMyTreaty(receData); //对接收到的数据进行反序列化 result = receiveData(my);
}
catch (Exception e)
{
return "";
} return result;
} private static string receiveData(MyTreaty AcceptData)
{
string result = "";
if (AcceptData.Type == 0)
{
result = Encoding.BigEndianUnicode.GetString(AcceptData.Content, 0,AcceptData.Content.Length);
}
else
{
if (!Directory.Exists("D:\\Pic\\"))
Directory.CreateDirectory("D:\\Pic\\");
if (File.Exists("D:\\Pic\\" + AcceptData.FileName))
return "";
MemoryStream ms = new MemoryStream(AcceptData.Content);
FileStream fs = new FileStream("D:\\Pic\\" + AcceptData.FileName, FileMode.OpenOrCreate, FileAccess.Write);
BinaryWriter ft = new BinaryWriter(fs);
ft.Write(ms.ToArray());
fs.Dispose();
fs.Close();
ms.Close();
result = "";
}
return result;
}问题在于接受完图片并且写入文件后,图片传输正确,但是在进行下一次socket接收数据的时候被阻塞,这是为什么,如何解决这个问题,希望有高手能回答,先说一声谢谢了。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货