socket的recv乱码~
socket的recv乱码~求救~
c++用socket发送消息和文件。
只是在接收端,我的电脑接受消息时会先出现一段乱码,再出现应该发送的信息,但是其他电脑都不会,为什么会这样~~~~
发送端:
#include<WinSock2.h>
#include<iostream>
#pragma comment (lib,"ws2_32.lib")
using namespace std;
void main(void)
{
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
cout<<"Winsock初始化失败。"<<endl;
return;
}
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(5150);
if(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))==SOCKET_ERROR)
{
cout<<"绑定出错。"<<endl;
cout<<WSAGetLastError()<<endl;
WSACleanup();
return;
}
else
cout<<"绑定成功。"<<endl;
if(listen(sockSrv,5)==SOCKET_ERROR)
{
cout<<"监听出错。"<<endl;
cout<<WSAGetLastError()<<endl;
WSACleanup();
return;
}
else
cout<<"监听成功。"<<endl;
SOCKET SockConn;
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
SockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
if(SockConn == INVALID_SOCKET)
{
cout<<"接受出错。"<<endl;
cout<<WSAGetLastError()<<endl;
WSACleanup();
return;
}
else
cout<<"接受成功。"<<endl;
char sendbufMess[1024];
memset(sendbufMess,0,sizeof(sendbufMess));
sprintf(sendbufMess,"你好!!欢迎来到IP为%s的服务器。",inet_ntoa(addrClient.sin_addr));
send(SockConn,sendbufMess,strlen(sendbufMess)+1,0);
char recvbuf[1024];
recv(SockConn,recvbuf,strlen(recvbuf),0);
cout<<recvbuf<<endl;
char sendbuf[1024];
DWORD dwRead;
BOOL bRet;
char filename[64];
char filepath[128];
cout<<"请输入文件名(例如:example.txt):";
cin>>filename;
send(SockConn,filename,strlen(filename)+1,0);
cout<<"请输入文件的绝对路径(例如:d:\\\\example.txt):";
cin>>filepath;
HANDLE hFile=CreateFileA(filepath,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
while(true)
{
bRet=ReadFile(hFile,sendbuf,1024,&dwRead,NULL);
if(bRet==FALSE)
{
cout<<"文件读取错误。"<<endl;
break;
}
else if(dwRead==0)
{
cout<<"文件发送成功。"<<endl;
break;
}
else
{
send(SockConn,sendbuf,dwRead,0);
}
}
closesocket(SockConn);
closesocket(sockSrv);
WSACleanup();
system("pause");
}
接收端:
#include<WinSock2.h>
c++用socket发送消息和文件。
只是在接收端,我的电脑接受消息时会先出现一段乱码,再出现应该发送的信息,但是其他电脑都不会,为什么会这样~~~~
发送端:
#include<WinSock2.h>
#include<iostream>
#pragma comment (lib,"ws2_32.lib")
using namespace std;
void main(void)
{
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
cout<<"Winsock初始化失败。"<<endl;
return;
}
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(5150);
if(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))==SOCKET_ERROR)
{
cout<<"绑定出错。"<<endl;
cout<<WSAGetLastError()<<endl;
WSACleanup();
return;
}
else
cout<<"绑定成功。"<<endl;
if(listen(sockSrv,5)==SOCKET_ERROR)
{
cout<<"监听出错。"<<endl;
cout<<WSAGetLastError()<<endl;
WSACleanup();
return;
}
else
cout<<"监听成功。"<<endl;
SOCKET SockConn;
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
SockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
if(SockConn == INVALID_SOCKET)
{
cout<<"接受出错。"<<endl;
cout<<WSAGetLastError()<<endl;
WSACleanup();
return;
}
else
cout<<"接受成功。"<<endl;
char sendbufMess[1024];
memset(sendbufMess,0,sizeof(sendbufMess));
sprintf(sendbufMess,"你好!!欢迎来到IP为%s的服务器。",inet_ntoa(addrClient.sin_addr));
send(SockConn,sendbufMess,strlen(sendbufMess)+1,0);
char recvbuf[1024];
recv(SockConn,recvbuf,strlen(recvbuf),0);
cout<<recvbuf<<endl;
char sendbuf[1024];
DWORD dwRead;
BOOL bRet;
char filename[64];
char filepath[128];
cout<<"请输入文件名(例如:example.txt):";
cin>>filename;
send(SockConn,filename,strlen(filename)+1,0);
cout<<"请输入文件的绝对路径(例如:d:\\\\example.txt):";
cin>>filepath;
HANDLE hFile=CreateFileA(filepath,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
while(true)
{
bRet=ReadFile(hFile,sendbuf,1024,&dwRead,NULL);
if(bRet==FALSE)
{
cout<<"文件读取错误。"<<endl;
break;
}
else if(dwRead==0)
{
cout<<"文件发送成功。"<<endl;
break;
}
else
{
send(SockConn,sendbuf,dwRead,0);
}
}
closesocket(SockConn);
closesocket(sockSrv);
WSACleanup();
system("pause");
}
接收端:
#include<WinSock2.h>