在socket中,客户端与服务器端建立连接后,服务器端怎么知道是哪台机器与其建立连接的 在socket中,客户端与服务器端建立连接后,服务器端怎么知道是哪台机器与其建立连接的 就是怎么知道客户端的IP地址?还有socket长连接时候,我怎么时时刻刻的查看客户端与服务器端是否断开了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Socket.RemoteAddress Socket.RemoteHost服务器端可以给连接上的客户端发送测试数据,一定时间内回收到客户端反应的可认为在线. 请参考:http://www.programfan.com/article/showarticle.asp?id=2289 我用的API,不是用的控件,我贴出代码来,麻烦大家给我修改一下吧procedure TForm1.OnWork1Accept(var message: TMessage);Var Client_Addr: TSockAddr; ClientLen: Integer; s:string;begin FillChar(Client_Addr,Sizeof(Client_Addr),0); ClientLen := Sizeof(Client_Addr); Conn_Socket := Accept(Server_Socket,@Client_Addr,@ClientLen);{ 能不能在这里判断出建立的这个 Comm_Socket 是哪台机器建立的,其IP是多少?} //读取/关闭 事件 WSAAsyncSelect(Conn_Socket, Form1.Handle, WM_WORK1_READ, FD_READ or FD_CLOSE);end; 解决了,只要 Client_Addr.sin_addr.S_addr 转换成字符串IP就行了 function IPIntToStr(I:Integer):String; var sinaddr:in_addr; begin sinaddr.S_addr:=i; result:=String(inet_ntoa(sinaddr)); end; 自己定义活动包探测客户端是否在线,不要用windows的全局活动包检测,至于长连接就是tcp哦。 谢谢楼上的 还有一个问题啊 我用API实现socket 能不能让程序既是服务器端,又是客户端 -------------------------------------------------------- 我用API实现socket 能不能让程序既是服务器端,又是客户端 --------------------------------------------------------意思是在同一个程序里客户端连接服务器?可以的,多个线程 在socketserver的onAccept事件中用Socket.RemoteAddress读取 -------------------------------------------------------- 我用API实现socket 能不能让程序既是服务器端,又是客户端 --------------------------------------------------------意思是在同一个程序里客户端连接服务器?可以的,多个线程------------------------------------------------------------------------------谢谢! 关于DBgrid的问题,在线等,请指教!!! 控件 Express DBeditors 数据更新问题 建表为什么老出错? 求Delphi界面设计原代码 。 [Delphi/VCL组件开发及应用]要与西门子的模块,关于Delphi与opc接口基础及编程 不可不看 关于多窗体的问题 请教: 如何调用Printer 大华播放sdk转换delphi很多值获取不正确,请高人帮看看 请问如何统计所选择的字段的值的总和? 求多线程解决方案:TCP通信,一个客户端连多个服务端 路过
Socket.RemoteHost
服务器端可以给连接上的客户端发送测试数据,一定时间内回收到客户端反应的可认为在线.
我贴出代码来,麻烦大家给我修改一下吧procedure TForm1.OnWork1Accept(var message: TMessage);
Var
Client_Addr: TSockAddr;
ClientLen: Integer;
s:string;
begin
FillChar(Client_Addr,Sizeof(Client_Addr),0);
ClientLen := Sizeof(Client_Addr);
Conn_Socket := Accept(Server_Socket,@Client_Addr,@ClientLen);
{
能不能在这里判断出建立的这个 Comm_Socket 是哪台机器建立的,其IP是多少?
}
//读取/关闭 事件
WSAAsyncSelect(Conn_Socket, Form1.Handle, WM_WORK1_READ, FD_READ or FD_CLOSE);
end;
只要 Client_Addr.sin_addr.S_addr 转换成字符串IP就行了 function IPIntToStr(I:Integer):String;
var
sinaddr:in_addr;
begin
sinaddr.S_addr:=i;
result:=String(inet_ntoa(sinaddr));
end;
还有一个问题啊
我用API实现socket 能不能让程序既是服务器端,又是客户端
我用API实现socket 能不能让程序既是服务器端,又是客户端
--------------------------------------------------------意思是在同一个程序里客户端连接服务器?可以的,多个线程
--------------------------------------------------------
我用API实现socket 能不能让程序既是服务器端,又是客户端
--------------------------------------------------------意思是在同一个程序里客户端连接服务器?可以的,多个线程------------------------------------------------------------------------------谢谢!