客户端将一个txt文件中的全部数据整合成一个字符串然后打包发送给服务器

Yo1988 2014-04-14 04:37:55
Socket通讯

Client端:
void CClientDlg::ClientInit(CDC* pDC,CRect rCell)
{
WSADATA wsaData;
int iPort = 9999;
int err;
err = WSAStartup(MAKEWORD(2,2),&wsaData);
if (err!=0)
{
return;
}
SOCKET sockClient;
sockClient = socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN ServerAddr;
memset(&ServerAddr,0,sizeof(ServerAddr));
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(iPort);
ServerAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
connect(sockClient,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr));

FILE* fDataFile;
char* sData;
int i,ch;
sData = new char(1000*sizeof(char));
fDataFile = _wfopen(L"data.txt",L"r");

ch = fgetc(fDataFile);
for (i=0;feof(fDataFile)==0;i++)
{
sData[i] = (char)ch;
ch = fgetc(fDataFile);
}

send(sockClient,sData,1000,0);
closesocket(sockClient);
WSACleanup();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
server端:
void CServerDlg::OnPaint()
{
CPaintDC dc(this);
CRect rClient;
GetClientRect(rClient);

struct sockaddr_in serveraddr;
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2),&wsaData) !=0)
{
return ;
}
SOCKET socketServer;
socketServer = socket(AF_INET,SOCK_STREAM,0);
memset(&serveraddr,0,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(9999);
serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

bind(socketServer,(SOCKADDR*)&serveraddr,sizeof(serveraddr));
listen(socketServer,1);

char cData[10000];
struct sockaddr_in cliaddr;
int len = sizeof(cliaddr);
accept(socketServer,(SOCKADDR*)&cliaddr,&len);
recv(socketServer,cData,10000,0);

CString sText;
sText.Format(L"%s",cData);
dc->DrawText(sText,rClient,DT_CENTER);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
目的:
客户端打开一个txt文件,然后将里面的所有内容全部整合到一个字符串中,将这个字符串发送给服务器,服务器接收到这个字符串,然后显示出来。

但是服务器收到的显示缺是一堆乱码....哪错了?
...全文
403 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
宛芪 2014-04-22
  • 打赏
  • 举报
回复
正在学习。。路过
longzhishen 2014-04-22
  • 打赏
  • 举报
回复
二进制是文件的原始数据,而且可以发送任何文件,这样发送保证没错!
mayudong1 2014-04-22
  • 打赏
  • 举报
回复
从txt文件中读数据,可能会有那个BOM头影响数据的完整性,尤其utf8格式的文件bom头是3个字节
arbey213333 2014-04-22
  • 打赏
  • 举报
回复
跟踪一下发送时的数据和接受后数据,看看哪的内容出错了。
dahaiI0 2014-04-14
  • 打赏
  • 举报
回复
sText.Format(L"%s",cData); 改成 sText.Format(L"%S",cData);试下。 对比下发送的字节流和接收到的字节流是否一致(调试状态下查看内存比较),一致则是你字符串处理有问题 另外TCP需要判断下recv的返回值,需要循环接收
Yo1988 2014-04-14
  • 打赏
  • 举报
回复
引用 1 楼 bragi523 的回复:
用2进制发吧
socket通讯的,send就是发送一个char类型的,为什么需要转换成2进制再发呢?不是很理解
Yo1988 2014-04-14
  • 打赏
  • 举报
回复
字符串发送不行么?
bragi523 2014-04-14
  • 打赏
  • 举报
回复
要不然转成UTF-8之类的
bragi523 2014-04-14
  • 打赏
  • 举报
回复
用2进制发吧

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧