网络传输上的问题,我有一个结构,里面有一个指针,也就是一个链表,指向下一条记录,但我现在将此链表通过网络传输以后,里面的指针指向了非法的地址,导致服务器端出错,请问,该如果解决...代码示意如下:struct _tagPackage
{
int mSize;
TCHAR szData;
_tagPackage *pNext;
}PACKAGE,*PPACKAGE;服务器端2条记录PACKAGE mPack[2];
mPack[0].mSize = 0
mPack[0].szData = TEXT("0");
mPack[0].pNext = &mPack[1];mPack[1]........
mPack[1].pNext = NULL;客户端将此结构传输到服务器端之后,mPack[0].pNext指向的将会是一个非法的地址,请问我如何解决这个问题~~~
{
int mSize;
TCHAR szData;
_tagPackage *pNext;
}PACKAGE,*PPACKAGE;服务器端2条记录PACKAGE mPack[2];
mPack[0].mSize = 0
mPack[0].szData = TEXT("0");
mPack[0].pNext = &mPack[1];mPack[1]........
mPack[1].pNext = NULL;客户端将此结构传输到服务器端之后,mPack[0].pNext指向的将会是一个非法的地址,请问我如何解决这个问题~~~
解决方案 »
- VC6与VS2008关于配置DirectX开发环境的问题
- 怎样得到子对话框句柄
- 一个关于MSDN中CButton::DrawItem()函数中的问题
- 为什么在CxxxApp里不能使用SetTimer(8,5000.NULL);谢谢!
- 关于win32键盘,DirectInput和keybd_evnt的问题
- !!!!!请问如何判断某个程序是否正在运行!!
- 基于对话框的应用程序,如何增加一个最小化按钮?
- 可以把文本文件,放到资源中吗?如果能如何调用?
- 如何判断当前是否有文档?(在MDI程序中)
- 请教OLEDB高手
- EventSelect的问题?
- 有问题需要帮忙,在程序中要从本地机向服务器拷贝文件,用CopyFile函数好用吗?
struct _tagTransferPackage
{
int mSize;
TCHAR szData;
}TRANSFERPACKAGE,*PTRANSFERPACKAGE;
根据链表结构生成一个TRANSFERPACKAGE结构的数组,然后在服务器端根据这个数组重构链表(如果服务器端非得要使用数组的话)
在服务器端九五意义了,看看你的接收代码,才知道如何解决。
Listen过程如下..
for(;;) //Better than while(true)
{
SOCKET newsocket;
struct sockaddr_in clientAddress;
int clientAddressLength;
clientAddressLength = sizeof(clientAddress);
newsocket = accept(listener,
(struct sockaddr *)&clientAddress,
&clientAddressLength);
if(newsocket < 0)
{
LOGERR(LOGFILE,TEXT("Accept connect failed!Error Number:%i\n"),WSAGetLastError());
WSACleanup();
return EXIT_FAILURE;
}
LOGERR(LOGFILE,TEXT("Get a Connect from %s\n"),inet_ntoa(clientAddress.sin_addr));
if(ThreadNumber < MAX_THREAD)//Ïß³ÌÓÐÓàÔò½Ó½ø
{
/* ÅäÖÃNode ½á¹¹ */
Node *pKey = NULL;
pKey = (Node*)malloc(sizeof(Node));
pKey->sock = newsocket;
memcpy(&pKey->ClientAddr,&clientAddress,clientAddressLength);
/*¼ÓÈ뵱ǰµÄSocketÁ¬½ÓÁ´±í*/
AddHead(ghSocketList,pKey);
/* ´´½¨Ò»¸öÏß³ÌÓëClient½»Ì¸ */
HANDLE hThread;
DWORD dwThreadId;
hThread = CreateThread(NULL,0,ThreadFunc,(LPVOID)pKey,0,&dwThreadId);
CloseHandle(hThread);
EnterCriticalSection(&gCriticalSection);
ThreadNumber++;
LeaveCriticalSection(&gCriticalSection);
}
else//·ñÔò·¢ËÍѶϢ¾Ü¾ø
{
TCHAR szMessage[9];
CreateMessageCommand(szMessage,9,SEND_REJECT);
int rc = send(newsocket,szMessage,strlen(szMessage),0);
if(rc==SOCKET_ERROR)
LOGERR(LOGFILE,TEXT("Send reject message failed! Error number: %i\n"),WSAGetLastError());
shutdown(newsocket,SD_BOTH);
closesocket(newsocket);
}
Sleep(3000);
}
LOGERR(LOGFILE,TEXT("Process Terminate\n"));
return 1;
}我觉得这个循环不应该出现问题,我Debug发现,当一个传输过程结束以后,则Server出现CPU占用100%的问题~~不知道为何..
int rc = 0while(temp>0)
{
rc = send(.....)
if(rc == SOCKET_ERROR)//Error handle
{...}
temp -= rc;
}
所以导致了一个死循环,但是奇怪的是,对方关闭连接,应该send出错,才是比较合理的.