Delphi socket连接.net Socket
[csharp]这几天一直研究Delphi连接.net的socket程序,终于有一些进展。
需求:
服务端截取前4个字节,转换为数字,次数字为业务代码。将决定调用哪个业务逻辑。
[html]
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net.Sockets;
using System.Threading;
using PivasUpdate;
using log4net;
using System.Reflection;
using System.Net;
namespace PivasUpdate
{
public class ServiceProcess
{
private const int LENGTH=1024;
private const int GETVERSION = 1;
private const int DOWNLOADNEW = 2;
private const int DOWNLOADFILE = 3;
public static AutoResetEvent allDone = new AutoResetEvent(false);
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private string cliendAddres;
private string INSTALLPATH = ConfigUtils.GetWindowsServiceInstallPath(ConfigUtils.SERVICENAME);
public void ProcessCallback(IAsyncResult ar)
{
Socket handler = null;
try
{
StateObject state = (StateObject)ar.AsyncState;
handler = state.workSocket;
cliendAddres = IPAddress.Parse(((IPEndPoint)handler.RemoteEndPoint).Address.ToString()) + ":"
+ ((IPEndPoint)handler.RemoteEndPoint).Port.ToString() + ":";
int bytesRead = handler.EndReceive(ar);
log.Info(cliendAddres + "接受到数据包大小:" + bytesRead + "字节");
int control = BitConverter.ToInt32(state.buffer, 0);
string c = UTF8Encoding.UTF8.GetString(state.buffer, 4, bytesRead - 4);
switch (control)
{
case GETVERSION:
log.Info(cliendAddres + "获取最新版本,请求版本号:" + c);
GetVersionNo(c, handler);
break;
case DOWNLOADNEW:
log.Info(cliendAddres + "下载更新配置文件:" + INSTALLPATH+"/"+c);
DownLoadNew(c, handler);
break;
case DOWNLOADFILE:
log.Info(cliendAddres + "下载文件," + INSTALLPATH+"/"+c);
DownLoadFile(INSTALLPATH + "/" + c, handler);
break;
default:
break;
}
}
catch (Exception e)
{
log.Error(cliendAddres + "程序出错," + e.Message);
}
finally
{
if (handler != null)
{
handler.Shutdown(SocketShutdown.Both);
handler.Close();
handler = null;
log.Info("与客户端:" + cliendAddres + "断开连接。");
}
}
}
public void DownLoadFile(string filePath,Socket handler)
{
if (!File.Exists(filePath))
{
string fail = "文件不存在.";
log.Info(cliendAddres+"访问文件:"+filePath+"不存在。");
byte[] failBytes = Encoding.UTF8.GetBytes(fail);
handler.BeginSend(failBytes, 0, failBytes.Length, 0, new AsyncCallback(SendCallBack), handler);
allDone.WaitOne();
return;
}
h
补充:软件开发 , Delphi ,
上一个:delphi操作xml
下一个:程序隐藏状态栏全屏显示
- 更多Delphi疑问解答:
- 用delphi做这个功能怎么做?
- 问delphi 中将Tquery控件查找到的记录数值写入某一edit中代码如何写?
- 有谁知道怎样在Delphi 7中显示代码的行数啊?或者有什么方法能够快速找到已知某一行数的代码啊!
- 关于delphi 操作EXcel的问题
- delphi ,sql,, 数据库 ,求助~~~~ 急~~~~~
- delphi变体记录问题
- delphi能实现反射吗?
- 谁会安装delphi 7 控件啊!会的话,请帮我在线安装一下? QQ785799795
- 在Delphi的Image控件上画移动的图片
- delphi 月份递增的循环查询
- 宝兰公司的开发工具delphi和c++builder现在的年代还流行吗?
- 我是沈阳做delphi开发的,想要集成短信功能到客户管理系统中,麻烦各位达人?
- 我是南昌做delphi开发的,想要集成短信功能到PMS中,分享下吧!
- delphi 取消窗体的最小化怎么弄
- 我是深圳做delphi开发的,想要集成短信功能到知识管理系统中,求达人指点!