110,545
社区成员
发帖
与我相关
我的任务
分享
private void OnReadComplete(IAsyncResult ar)
{
int bytesRead = 0;
try
{
NetworkStream myNetworkStream = (NetworkStream)ar.AsyncState;
bytesRead = myNetworkStream.EndRead(ar);
fs = new FileStream(tempFilePath, FileMode.Append, FileAccess.Write);
fs.Write(buffer, 0, buffer.Length);
fs.Close();
while (myNetworkStream.DataAvailable)
{
myNetworkStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(OnReadComplete), myNetworkStream);
}
byte[] rerultBytes = File.ReadAllBytes(tempFilePath);
byte[] data = CCompress.DecompressBytes(rerultBytes);
fs = new FileStream(tempFilePath, FileMode.Create, FileAccess.Write);
fs.Write(data, 0, data.Length);
fs.Close();
fs.Dispose();
// 这里异步调用,不然这里可能会比较耗时
ParameterizedThreadStart start = new ParameterizedThreadStart(handleProtocol);
start.BeginInvoke(tempFilePath, null, null);
}
catch (Exception ex)
{
Dispose();
}
}
public void SendMessage(string filePath)
{
try
{
byte[] data = File.ReadAllBytes(filePath);
//压缩文件
data = CCompress.CompressBytes(data);
lock (streamToServer)
{
streamToServer.Write(data, 0, data.Length); // 发往服务器
}
}
catch (Exception ex)
{
throw ex;
}
}
if(bytesRead>0)
{
fs.Write(CCompress.DecompressBytes(buffer), 0, bytesRead);
}
else
{
fs.Close();
}
fs.Close();
fs.Dispose();
public class CSocketServer
{
public void StartService()
{
//eSys.DbManager.CDbManager dbManager = new eSys.DbManager.CDbManager();
try
{
CServerGlobalData.ServerPort = CServerDataHandle.Port;
TcpListener listener = new TcpListener(IPAddress.Any, CServerGlobalData.ServerPort);
listener.Start();
while (true)
{
// 获取一个连接,同步方法,在此处中断
TcpClient client = listener.AcceptTcpClient();
RemoteClient wapper = new RemoteClient(client);
wapper.BeginRead();
}
}
catch (Exception ex)
{
CLog.Write("服务启动异常:" + ex);
}
}
}