急!!!在线等,一个运行错误:运行时,报红 X 提示为“......”内存引用“......”内存,该内存不能为“written”
以下是一个基于TCP的网络应用程序,该程序是在WIN32 控制台上编写。服务器和客户端放在同一个工作区的2个工程里
代码如下:
服务器程序:
#include <Winsock2.h>
#include <stdio.h>
#include <string>
int main()
{
WSADATA data;
WORD version;
if(WSAStartup(MAKEWORD(1,1),&data)!=0)
{
printf("WSAStartup Error:%d",WSAGetLastError());
WSACleanup();
exit(-1);
}
SOCKET ServiceListen;
ServiceListen=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==ServiceListen)
{
printf("socket Error:%d",WSAGetLastError());
WSACleanup();
exit(-1);
}
SOCKADDR_IN ServiceAddr;
ServiceAddr.sin_family=AF_INET;
ServiceAddr.sin_port=htons(6000);
ServiceAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if(SOCKET_ERROR==bind(ServiceListen,(struct sockaddr FAR *)&ServiceAddr,sizeof(ServiceAddr)))
{
printf("bind Error:%d",WSAGetLastError());
WSACleanup();
exit(-1);
}
listen(ServiceListen,5);
SOCKADDR_IN FromAddr;
int iLen=sizeof(FromAddr);
char szInfo[100];
SOCKET ServiceSendRecv;
while(2)
{
ServiceSendRecv=accept(ServiceListen,(struct sockaddr FAR *)&FromAddr,&iLen);
if(ServiceSendRecv==INVALID_SOCKET)
{
printf("accept Error:%d",WSAGetLastError());
WSACleanup();
exit(-1);
}
sprintf(szInfo,"%s:%d","来自服务器的消息",FromAddr.sin_addr);
send(ServiceSendRecv,szInfo,strlen(szInfo)+1,0);
// memset(szInfo,'0',100);
int iCount;
char szInformation[100];
iCount=recv(ServiceSendRecv,szInformation,100,0);
if(iCount>1)
{
szInfo[iCount]='\0';
sprintf("客户端发送过来的消息:%s",szInformation);
}
closesocket(ServiceSendRecv);
}
return 1;
}
客户端程序:
#include <Winsock2.h>
#include <stdio.h>
#include <string>
int main()
{
WSADATA data;
WORD version;
if(WSAStartup(MAKEWORD(1,1),&data)!=0)
{
printf("WSAStartup Error:%d",WSAGetLastError());
WSACleanup();
exit(-1);
}
SOCKET ClientSocket;
ClientSocket=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==ClientSocket)
{
printf("socket Error:%d",WSAGetLastError());
WSACleanup();
exit(-1);
}
SOCKADDR_IN ClientAddr;
ClientAddr.sin_family=AF_INET;
ClientAddr.sin_port=htons(6000);
ClientAddr.sin_addr.S_un.S_addr=inet_addr("169.254.165.10");
if(SOCKET_ERROR==connect(ClientSocket,(struct sockaddr FAR *)&ClientAddr,sizeof(ClientAddr)))
{
printf("connect Error:%d",WSAGetLastError());
WSACleanup();
exit(-1);
}
char szInfoClient[100];
int iCount=recv(ClientSocket,szInfoClient,100,0);
if(iCount>1)
{
szInfoClient[iCount]='\0';
printf("服务器发送的消息:%s\n",szInfoClient);
}
PHOSTENT phe;
phe=gethostbyname("PC-200807201643");
SOCKADDR_IN TempAddr;
memcpy(&TempAddr.sin_addr,phe->h_addr_list,phe->h_length);
sprintf(szInfoClient,"来自客户端:%s 的消息",inet_ntoa(TempAddr.sin_addr));
send(ClientSocket,szInfoClient,strlen(szInfoClient)+1,0);
return -1;
}
运行时,报红 X 提示为“......”内存引用“......”内存,该内存不能为“written”
现在大致确定错误出现在 服务器 的发消息部分,如下:
int iCount;
char szInformation[100];
iCount=recv(ServiceSendRecv,szInformation,100,0);
if(iCount>1)
{
szInfo[iCount]='\0';
sprintf("客户端发送过来的消息:%s",szInformation);
}
closesocket(ServiceSendRecv);
的iCount=recv(ServiceSendRecv,szInformation,100,0);语句,但找不出错在那里。请各位指教!!!