社区
网络编程
帖子详情
关于SOCKET和LPVOID转换
clzzcl
2003-06-20 04:59:03
我最近刚刚学习socket,用如下语句出错
sClinet是SOCKET类型
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)sClient,0,&dwThreadId);
C2664 (LPVOID)sClient此参数转换不了
在vc6.0里还可以的
...全文
182
12
打赏
收藏
关于SOCKET和LPVOID转换
我最近刚刚学习socket,用如下语句出错 sClinet是SOCKET类型 hThread = CreateThread(NULL,0,ClientThread,(LPVOID)sClient,0,&dwThreadId); C2664 (LPVOID)sClient此参数转换不了 在vc6.0里还可以的
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Healer
2003-07-22
打赏
举报
回复
那个三角什么时候可以加啊????
开心:)
clzzcl
2003-06-20
打赏
举报
回复
OK了 楼上的说的对要用 ststic
Healer
2003-06-20
打赏
举报
回复
楼主的意思无非是要把 Socket对象的指针传入工作线程了,
注意:
DWORD WINAPI ClientThread(LPVOID lpData);
要ststic或全局的函数.
注意lpData的显式转化了. 这个没有什么好说的,
(呵呵, 好像实现Socket类啊)
clzzcl
2003-06-20
打赏
举报
回复
现在不是上面出的错,是这句
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&sClient,0,&dwThreadId);
d:\cldata2\clsockct\FarControl\FarControlServer\mysocket.cpp(70): error C2664: “CreateThread” : 不能将参数 3 从“DWORD (LPVOID)”转换为“LPTHREAD_START_ROUTINE”
我的定义
DWORD WINAPI ClientThread(LPVOID lpParm);
实现
DWORD WINAPI mysocket::ClientThread(LPVOID lpParm)
{
SOCKET sock = *(SOCKET*)lpParm;
char szBuff[DEFAULT_BUFFER];
int ret,
nLeft,
idx;
bool bRecvOnly = false;
while(1)
{
ret = recv(sock,szBuff,DEFAULT_BUFFER,0);
if (ret == 0)
.....................
Coold
2003-06-20
打赏
举报
回复
声明和定义都要加上关键字WINAPI啊
DWORD WINAPI ClientThread(LPVOID lpData)
{
SOCKET pClient = *(SOCKET*)lpData;
...
}
clzzcl
2003-06-20
打赏
举报
回复
不是我的声明是对的就是这样
DWORD WINAPI ClientThread(LPVOID lpData);
应该是vc7.0的原因 vc6.0是可以的
不过我不知道怎样解决
Coold
2003-06-20
打赏
举报
回复
漏看了,糊涂。
在线程函数的声明和定义都要加上关键字WINAPI
DWORD WINAPI ClientThread(LPVOID lpData);
clzzcl
2003-06-20
打赏
举报
回复
不行呀!
//建立一个线程
sClient,0,&dwThreadId);hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&sClient,0,&dwThreadId);
出错
d:\cldata2\clsockct\FarControl\FarControlServer\mysocket.cpp(70): error C2664: “CreateThread” : 不能将参数 3 从“DWORD (LPVOID)”转换为“LPTHREAD_START_ROUTINE”
Coold
2003-06-20
打赏
举报
回复
sClinet是SOCKET类型,必须传指针
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&sClient,0,&dwThreadId);
DWORD ClientThread(LPVOID lpData)
{
SOCKET pClient = *(SOCKET*)lpData;
...
}
clzzcl
2003-06-20
打赏
举报
回复
不是CSocket对象,代码如下
SOCKET sClient;
sClient = accept(sServer,(struct sockaddr *)&clientaddr,&iAddrSize);
Phourm
2003-06-20
打赏
举报
回复
sClient是一个CSocket对象吧
不能把一个对象转换成VOID指针
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&sClient,0,&dwThreadId);
DWORD ClientThread(LPVOID lpData)
{
CSocket* pClient = (CSocket*)lpData;
...
}
clzzcl
2003-06-20
打赏
举报
回复
对了我用的是vc7.0
端口扫描VC++程序代码
扫描多IP之多端口 ////////////////////////////////////////////////////////////////////////// //FileName: PortScanner.cpp //Data: 2009-04-18 //Remark: 扫描核心代码 ////////////////////////////////////////////////////////////////////////// #pragma once #include "Header.h" #include "resource.h" ////////////////////////////////////////////////////////////////////////// //端口器扫描初始化 ////////////////////////////////////////////////////////////////////////// BOOL InitPortScan() { WSADATA WsaData; //构建
socket
版本信息 WORD WsaVersion=MAKEWORD(2,2); //初始化网络 if(WSAStartup(WsaVersion,&WsaData;)!=0) { MessageBoxA(NULL,"WSAStartup fail;",NULL,NULL); return FALSE; } return TRUE; } ////////////////////////////////////////////////////////////////////////// //connect线程函数 ////////////////////////////////////////////////////////////////////////// DWORD WINAPI PortScanthread(
LP
VOID
Lp
Param) { ThreadParam Param; //将参数复制 MoveMemory(&Param;,
Lp
Param,sizeof(Param)); //将hCopyOkEvent设为有信号状态来通知扫描主线程进行下一次循环 SetEvent(Param.hCopyOkEvent);
SOCKET
Sock; SOCKADDR_IN SockAddr = {0}; //创建
socket
Sock =
socket
(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (Sock==INVALID_
SOCKET
) { MessageBoxA(NULL,"INVALID_
SOCKET
",NULL,NULL); } //填充IP地址及端口信息 SockAddr.sin_family = AF_INET; SockAddr.sin_addr.s_addr = htonl(Param.Ip); SockAddr.sin_port = htons(Param.Port); //将IP地址
转换
为字符串 char *IpChar = inet_ntoa(SockAddr.sin_addr); char str[200]; if(connect(Sock,(SOCKADDR *)&SockAddr;,sizeof(SockAddr))==0) { //连接成功, sprintf(str,"%s : %d 连接成功\n",IpChar,Param.Port); } else { //连接失败 sprintf(str,"%s : %d 连接失败\n",IpChar,Param.Port); } //添加显示信息 InsertInfo(str); //释放一个信号量计数 ReleaseSemaphore(Param.hThreadNum,1,NULL); //关闭
socket
close
socket
(Sock); return 0; } ////////////////////////////////////////////////////////////////////////// //扫描主线程 ////////////////////////////////////////////////////////////////////////// DWORD WINAPI MainThread(
LP
VOID
Lp
Param) { MainThreadParam Param; //将参数复制 MoveMemory(&Param;,
Lp
Param,sizeof(Param)); //将Param.hCopyEvent设置为有信号状态 SetEvent(Param.hCopyEvent); ThreadParam threadparam = {0}; //创建子线程的“参数复制完成”事件对象,并作为参数传入PortScanthread() HANDLE hThreadCopyOkEvent = CreateEvent(NULL,TRUE,FALSE,NULL); threadparam.hCopyOkEvent=hThreadCopyOkEvent; //创建一个信号量对象来控制子线程的总数量PortScanthread() HANDLE hThreadNum = CreateSemaphore(NULL,256,256,NULL); threadparam.hThreadNum = hThreadNum; //循环connect for (DWORD Ip = Param.StartIp;Ip<=Param.EndIp;Ip++) { for (DWORD Port = Param.StartPort;Port<=Param.EndPort;Port++) { //等待hThreadNum发出信号(表示有可有线程) DWORD WaitRes =WaitForSingleObject(hThreadNum,200); if (WaitRes==WAIT_OBJECT_0) { threadparam.Ip=Ip; threadparam.Port=Port; CreateThread(NULL,0,PortScanthread,&threadparam;,0,NULL); //等待其子线程发出“参数复制完毕”的信号 WaitForSingleObject(threadparam.hCopyOkEvent,INFINITE); //重置threadparam.hCopyOkEvent为无信号状态 ResetEvent(threadparam.hCopyOkEvent); } else if(WaitRes==WAIT_TIMEOUT) { Port--; continue; } } } return 0; }
CreateThread函数,无法将参数 3 从“DWORD (__cdecl *)(
LP
VOID
)”
转换
为“
LP
THREAD_START_ROUTINE” PVZCheater
问题: “HANDLE CreateThread(
LP
SECURITY_ATTRIBUTES,SIZE_T,
LP
THREAD_START_ROUTINE,
LP
VOID
,DWORD,
LP
DWORD)”: 无法将参数 3 从“DWORD (__cdecl *)(
LP
VOID
)”
转换
为“
LP
THREAD_START_ROUTINE” PVZCheater 解决方法: 选debug模式,然后将x86改为x64 ...
C++和C# 双向简单的
socket
通讯 适用c#和c# c++和c++
程序1 创建两个
socket
一个绑定套接字 一个不绑定 然后用绑定的
socket
来专门接收8000端口的消息 用不绑定的
socket
来发送8001端口的消息 程序2创建两个
socket
一个绑定套接字 一个不绑定 然后用绑定的
socket
来专门接收8001端口的消息 用不绑定的
socket
来发送8000端口的消息 程序1代码如下 C# public static...
C++
socket
通信详解
Socket
是什么
Socket
是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,
Socket
其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在
Socket
接口后面,对用户来说,一组简单的接口就是全部,让
Socket
去组织数据,以符合指定的协议。 原作者将
socket
通信类比为打电话这一生活场景。这里我把TCP服务器比作政府某一服务部门能,TCP客户端比作企业中某一部门电话,描述这一过程,恰好就像是
socket
通信,服务部门提供服务,企业部门申请服务。 要实现通信,首先政府
关于
socket
的整理
对于
socket
的编程,一直希望能够写一个很好用的封装好了的类。但是,却发现因需求的改变,导致总是封装好的
socket
无法下次再使用。近几天,又折腾了下
socket
,故将想到的整理如下。 该文主要是针对一些资料的整理(个人没那个能力封装好比他们更好的类)。而且到现在为止,也没完全整理出一个比较有实用性的资源。该文主要涉及如下: (
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章