可否在client.active=true时,把socket变为阻塞模式的 -- 顺便给大家一个unit,用于socks5客户端的(100分)

  • 主题发起人 主题发起人 MrMengyi
  • 开始时间 开始时间
M

MrMengyi

Unregistered / Unconfirmed
GUEST, unregistred user!
直接修改属性是不可能的
我用ioctlsocket设置
随不报错,但无效果
help中写到先要用WSAAsyncSelect,WSAEventSelect去除定义的消息等
再调用ioctlsocket得到WSAEINVAL错误
和help中写的相反 faint

现在使用select等待
但是程序结束再运行
send就错了

socks5客户一般是用阻塞方式请求/应答的
用异步比较复杂了

现在还差这一个问题,其余的基本完成了

我的程序可以在http://web.infohonor.com/littlecat__/socks5.rar
其中用socks5proxy中的函数可以实现穿越socks5代理的会话功能
untMain中的参数各位自己调整吧

TCP需要先连接sock5服务器,成功后可以直接使用
UDP获得必要的Socket后,使用var参数返回的addr和port通讯
发送时,先要封装UDP头(也有函数)
接收时,服务器也会加同样的头,结构都定义好了,各位可自己写了
 
我有办法,呵呵handle是窗体的句柄,TServerSocket不知道是不是隐蔽窗口
如果是的话,要用哪个窗体的句柄。
WSAAsyncSelect(ServerSocket.socket.handle,handle,0,0);
在把所有的client的套节子
WSAAsyncSelect(ClientSocket.socket.handle,handle,0,0);
 
你是说这样吧:
WSAAsyncSelect(ServerSocket.socket.sockethandle,handle,0,0);
我现在是讲clientsocket

这样处理后,再调用ioctlsocket就出错了
 
使用WSAAsyncSelect以后就没必要使用ioctlsocket了,
ClientSocket后面的代码也有啊,
 

我试试
还有能否在函数退出时恢复原来的设置呢?
 
WSAAsyncSelect(
socket.Socket.SocketHandle, //socket 接口
socket.Socket.Handle, //socket 消息窗体句柄
CM_SOCKETMESSAGE, //消息
Longint(Byte( //对应的值
socket.Socket.AsyncStyles)));
我会加上这个功能的
socks5代理客户端这样就比较完整了
 
接受答案了.
 
后退
顶部