/*************很简单的一个发送接收***********************************/
SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("Failed socket() \n");
return 0;
}
// 填充sockaddr_in结构
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4567);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
// 绑定这个套节字到一个本地地址
if(::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("Failed bind() \n");
return 0;
}
// 进入监听模式
if(::listen(sListen, 2) == SOCKET_ERROR)
{
printf("Failed listen() \n");
return 0;
}
/********************************************************************************/
// 循环接受客户的连接请求
sockaddr_in remoteAddr;
int nAddrLen = sizeof(remoteAddr);
SOCKET sClient;
/*****************************************************************************/
while(TRUE)
{
// 接受一个新连接
sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
if(sClient == INVALID_SOCKET)
{
printf("Failed accept()");
continue;
}
printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
break; }
char buffer[1024];
char temp[1024];
char *pBuffer;
memset(buffer,0,sizeof(buffer));
memset(temp,0,sizeof(temp));
int rcv = recv(sClient,buffer, 1024, 0);
int i=0;
for (; buffer[i]!='*'; i++)
{
temp[i] = buffer[i];
} temp[i++] = '\0';
long lFileSize = atol(temp);
printf("%ld",lFileSize); pBuffer=new char[lFileSize+1];
pBuffer[0]='\0';
char* pBuf = pBuffer;
long iTemp = 0;
for (int j=i; j<rcv; j++)
{
pBuf[iTemp++] = buffer[j];
}
while (1)
{
rcv = recv(sClient, buffer, 1024, 0);
if (rcv == -1)
{
//链路异常断开了
break;
}
else if(rcv == 0)
{
//这种情况就是lFileSize计算错了有可能出现。
break;
}
for (int ij=0; ij<=rcv; ij++)
{
pBuf[ij+iTemp] = buffer[ij];
}
iTemp += rcv;
if (iTemp >= lFileSize)
{
break;
}
}
FILE *file = fopen("c:\\nn15.bmp","wb");
fwrite(pBuf,1,lFileSize,file);
fclose(file); /******************************************************************************************/发送方
/*******************************************************************************************/ SOCKET s = NULL ;
s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
printf(" Failed socket() \n");
return ;
}
// 填写远程地址信息
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(4567);
servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
while(1)
{
if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == 0)
break;
::Sleep(1000);
}
FILE *pFile; //原文件流
FILE *pFileSave;//目标文件流
int iTmp = 0;
//打开源文件 ,只读方式
pFile = fopen("c:\\lpFileName.bmp","rb");
if(pFile == NULL){
printf("%s : No such file or directory.\nFailed to open file for reading.\n");
} fseek(pFile,0L,2); long lenbuf = ftell(pFile);
rewind(pFile);
char *buffpic = new char[lenbuf+1];//开辟长度缓冲区
memset(buffpic,0,sizeof(buffpic));//清0 fread(buffpic, lenbuf+1, 1,pFile);//读入输入流
char temp[260];
memset(temp,0,sizeof(temp));//缓冲区清0
ltoa(lenbuf, temp, 10);//文件长度
int templen = strlen(temp);//转整形
char *filebuff = new char[templen+lenbuf+2]; //将数据存入缓冲区
memcpy(filebuff, temp, templen);
*(filebuff + templen) = '*';
memcpy(filebuff+templen+1, temp, templen); iTmp =::send(s,filebuff,templen+lenbuf+1,0);
SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("Failed socket() \n");
return 0;
}
// 填充sockaddr_in结构
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4567);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
// 绑定这个套节字到一个本地地址
if(::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("Failed bind() \n");
return 0;
}
// 进入监听模式
if(::listen(sListen, 2) == SOCKET_ERROR)
{
printf("Failed listen() \n");
return 0;
}
/********************************************************************************/
// 循环接受客户的连接请求
sockaddr_in remoteAddr;
int nAddrLen = sizeof(remoteAddr);
SOCKET sClient;
/*****************************************************************************/
while(TRUE)
{
// 接受一个新连接
sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
if(sClient == INVALID_SOCKET)
{
printf("Failed accept()");
continue;
}
printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
break; }
char buffer[1024];
char temp[1024];
char *pBuffer;
memset(buffer,0,sizeof(buffer));
memset(temp,0,sizeof(temp));
int rcv = recv(sClient,buffer, 1024, 0);
int i=0;
for (; buffer[i]!='*'; i++)
{
temp[i] = buffer[i];
} temp[i++] = '\0';
long lFileSize = atol(temp);
printf("%ld",lFileSize); pBuffer=new char[lFileSize+1];
pBuffer[0]='\0';
char* pBuf = pBuffer;
long iTemp = 0;
for (int j=i; j<rcv; j++)
{
pBuf[iTemp++] = buffer[j];
}
while (1)
{
rcv = recv(sClient, buffer, 1024, 0);
if (rcv == -1)
{
//链路异常断开了
break;
}
else if(rcv == 0)
{
//这种情况就是lFileSize计算错了有可能出现。
break;
}
for (int ij=0; ij<=rcv; ij++)
{
pBuf[ij+iTemp] = buffer[ij];
}
iTemp += rcv;
if (iTemp >= lFileSize)
{
break;
}
}
FILE *file = fopen("c:\\nn15.bmp","wb");
fwrite(pBuf,1,lFileSize,file);
fclose(file); /******************************************************************************************/发送方
/*******************************************************************************************/ SOCKET s = NULL ;
s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
printf(" Failed socket() \n");
return ;
}
// 填写远程地址信息
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(4567);
servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
while(1)
{
if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == 0)
break;
::Sleep(1000);
}
FILE *pFile; //原文件流
FILE *pFileSave;//目标文件流
int iTmp = 0;
//打开源文件 ,只读方式
pFile = fopen("c:\\lpFileName.bmp","rb");
if(pFile == NULL){
printf("%s : No such file or directory.\nFailed to open file for reading.\n");
} fseek(pFile,0L,2); long lenbuf = ftell(pFile);
rewind(pFile);
char *buffpic = new char[lenbuf+1];//开辟长度缓冲区
memset(buffpic,0,sizeof(buffpic));//清0 fread(buffpic, lenbuf+1, 1,pFile);//读入输入流
char temp[260];
memset(temp,0,sizeof(temp));//缓冲区清0
ltoa(lenbuf, temp, 10);//文件长度
int templen = strlen(temp);//转整形
char *filebuff = new char[templen+lenbuf+2]; //将数据存入缓冲区
memcpy(filebuff, temp, templen);
*(filebuff + templen) = '*';
memcpy(filebuff+templen+1, temp, templen); iTmp =::send(s,filebuff,templen+lenbuf+1,0);
改成:
memcpy(filebuff+templen+1, buffpic, lenbuf);