自己搞个传文件,最后总产生一个 CFileException::genericException
客户端读取C盘根目录下的一个MP3,然后发送给服务器端。服务器端接收完全部文件后保持到D盘根目录下。
下面接收完以后,D盘下的MP3是可以播放的,所以估计字节都正确接收了。但不知道为什么总产生一个异常,由于实在没能解决,最后就不得不装傻来解决了
#include <iostream>using namespace std;#include <afxtempl.h>#include <afxwin.h>void main(){ cout<<" 服务器 "<<endl; WSADATA wd; WSAStartup(MAKEWORD(2,2), &wd); SOCKET s1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN tcpaddr; tcpaddr.sin_family = AF_INET; tcpaddr.sin_port = htons(5150); tcpaddr.sin_addr.S_un.S_addr = htonl( INADDR_ANY ); bind(s1, (SOCKADDR*)&tcpaddr, sizeof(tcpaddr)) ; listen(s1, 5); SOCKADDR_IN ClientAddr; int len= sizeof(SOCKADDR_IN);; SOCKET s2; s2 = accept(s1, (SOCKADDR*)&ClientAddr, &len); if( s2 != SOCKET_ERROR ) cout<<"有客户机连入"<<endl; char size[100]; recv(s2, size, 100,0); cout<<"服务器端收到的文件大小为\t"<<size<<endl; ULONGLONG nSize = _atoi64(size); //char * buf = new char[ _atoi64(size) ]; //::ZeroMemory(buf,_atoi64(size)); //_atoi64(buf); CFile file(L"d:\\b.mp3", CFile::modeCreate /*| CFile::typeBinary */| CFile::modeReadWrite); while(1) { char * buf; if( nSize ) { buf = new char[1000]; int r = recv(s2, buf, 1000, 0); try { file.Write(buf, r); } catch(CFileException*e) { e->Delete(); break; } nSize -= r; delete [] buf; } else break; } //file.Close(); //delete [] buf; WSACleanup();}#include <iostream>using namespace std;#include <afxwin.h>void main(){ cout<<" 客户端 "<<endl; WSADATA wd; WSAStartup(MAKEWORD(2,2), &wd); SOCKET s1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN add; add.sin_family = AF_INET; add.sin_port = htons(5150); add.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); int a=connect(s1, (SOCKADDR*)&add, sizeof(add)); if(a==WSAECONNREFUSED || a==WSAETIMEDOUT) { cout<<"没连上"<<endl; return; } CFile file(L"C:\\和兰花在一起.mp3", CFile::typeBinary); ULONGLONG FileLength = file.GetLength(); char * size = new char[100]; ::ZeroMemory(size,100); sprintf(size, "%i64", FileLength); cout<<" size: "<<size<<endl; send(s1, size, 10, 0); LONGLONG filePointer=file.GetPosition(); while(1) { char *buf; if( FileLength ) { buf = new char[1000]; UINT r = file.Read(buf, 1000); int s = send(s1, buf, r, 0); filePointer += s; file.Seek(filePointer, CFile::begin); FileLength -= s; } else break; } }