C++中_beginthread传递的参数值错误

有以下两个方法,我在Connect中创建SOCKET但是在Connect中的值是正常的,到了Receive中就变了:Connect:780Receive:18956795... 有以下两个方法,我在Connect中创建SOCKET但是在Connect中的值是正常的,到了Receive中就变了:
Connect:780
Receive:1895679544
求高手帮看看原因!!!
// 连接设备
LONG Czh_OcxIFCtrl::Connect(LPCTSTR ComNum, LONG NaudNum)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加调度处理程序代码

// 初始化套接字
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
Sleep(3000);
return 0;
}
//创建套接字
static SOCKET sock;
if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET){
return 0;
}
struct sockaddr_in serverAddress;
memset(&serverAddress,0,sizeof(sockaddr_in));
serverAddress.sin_family=AF_INET;
serverAddress.sin_addr.S_un.S_addr = inet_addr(ComNum);
serverAddress.sin_port = htons(NaudNum);

//建立和服务器的连接
if(connect(sock,(sockaddr*)&serverAddress,sizeof(serverAddress))==SOCKET_ERROR){
Sleep(3000);
return 0;
}
static int sockID = sock;
//启动线程接收数据
char str[20];
sprintf(str, "%d", sock);
FILE* log;
log=fopen("log/log1.txt","a+");
if (log!=NULL){
fprintf(log,"%s\n",str);
}
fclose(log);

_beginthread(Receive,0,&sockID);

//记录连接
string ipadd(ComNum);
socketList[ipadd] = sockID;
ipList[sockID] = ipadd;

return 1;
}
void Czh_OcxIFCtrl::Receive(PVOID param)
{
int* sockID = (int*)param;
char str[20];
sprintf(str, "%d", sockID);
FILE* log;
log=fopen("log/log1.txt","a+");
if (log!=NULL){
fprintf(log,"%s\n",str);
}
fclose(log);

char buf[2096];
while(1)
{
SOCKET* sock=(SOCKET*)param;
int bytes;
if((bytes=recv(*sock,buf,sizeof(buf),0))==SOCKET_ERROR){
continue;
}
}
}
展开
 我来答
空雪梦见
2013-07-13 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1197万
展开全部
别用&sockID

用 (LPVOID) sockID

转回来的时候别用
int* sockID = (int*) param;

int sockID = (int) param; (或者SOCKET sock = (SOCKET)param;

原因:你引用指针的时候,指针指向的变量已经没掉了(出了作用域了
所以你应该传值而不是传指针
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式