如题!
解决方案 »
- 求助:missing storage-class or type specifiers??
- 哪位做过Vista效果的ProgressBar
- 求RGB转YUV的算法
- 为什么VK_UP,VK_LEFT可以识别,而VK_W,VK_A等就不行了,说未声明的错误
- realplay 控件的问题
- 服务器与客户端采用那种通讯模式比较好,详情请看里面。
- 9针标准串口去掉DCD脚为什么程序可以发送数据不能接收数据了
- 相聚在csdn的朋友们:小弟和几个哥们儿正准备开一家软件公司,为了公司的生存,我不得不去熟悉市场跟客户建立一种关系,请问一个技术员转
- 怎样成批删除文件?
- 关于MFC的CSocket传输图片问题
- 提前设置控件属性
- 请教了,vc多线程
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
HANDLE hume;
CFile myFile;
UINT nActual = 0;
SOCKADDR_IN ser2;
SOCKET ser1;
int len;
SOCKADDR_IN ser4;
void RevFile(const SOCKET& s)
{
char buffer[1024];
char temp[1024];
int rcv = recv(s,buffer, 1024, 0);
for (int i=0; buffer[i]!='*'; i++)
{
temp[i] = buffer[i];
}
temp[i++] = '\0';
CString strFileName = temp;
strcpy(temp, buffer + i);
long lFileSize = atol(temp);
CString m_strFilePath="d:\\tutu.bmp";//+strFileName; CFile file(m_strFilePath, CFile::modeCreate | CFile::modeWrite);
long iTemp = 0;
while (1)
{
rcv = recv(s, buffer, 1024, 0);
if (rcv == 0)
{
break;
}
file.Write(buffer, rcv);
iTemp += rcv;
}
file.Close();
if (iTemp != lFileSize)
{
}
closesocket(s);
}
void wordthd(const SOCKET& s,char buffer[1024])
{
if (myFile.Open(("c:\\infa.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite, NULL))
{
myFile.SeekToEnd();
myFile.Write(buffer,strlen(buffer));
myFile.Close();
}
closesocket(s);
}
DWORD WINAPI picturethd(LPVOID lpParameter
)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
//return 1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
}
SOCKET ser1=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN ser2;
ser2.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
ser2.sin_family=AF_INET;
ser2.sin_port=htons(5999);
bind(ser1,(SOCKADDR*)&ser2,sizeof(SOCKADDR));
listen(ser1,10);
int len=sizeof(SOCKADDR);
SOCKADDR_IN ser4;
while(1)
{
SOCKET s=accept(ser1,(SOCKADDR*)&ser4,&len);
char buffer[1024];
char temp[1024];
int rcv = recv(s,buffer,strlen(buffer),0);
::AfxMessageBox(buffer);//就是这里老是只出现一个P!!!!!!!!!!!!!!!!!!!!!!!然后后面的就乱了。
if(strcmp(buffer,"pict")==0)
RevFile(s);
else
wordthd(s,buffer);
}
//ReleaseMutex(hume);
}
void CMotherinsectDlg::OnButton1()
{
HANDLE nimei=CreateThread(NULL,0,picturethd,NULL,0,NULL);
CloseHandle(nimei);
//CreateThread(NULL,0,wordthd,NULL,0,NULL);
//hume=CreateMutex(NULL,FALSE,NULL);//匿名的互斥变量
MSG stMsg = {0};
while(1)
{
::GetMessage (&stMsg,(HWND)NULL,0,0);
::TranslateMessage (&stMsg);
::DispatchMessage (&stMsg);
}
}
::AfxMessageBox(buffer);//就是这里老是只出现一个P!!!!!!!!!!!!!!!!!!!!!!!然后后面的就乱了。
---------
出一个就不错了...其他地方都还没有看....先吧这里改成
int rcv = recv(s,buffer,sizeof(buffer),0);
int length = recv(s,buffer,1024,0);
buffer[length]='\0';
::AfxMessageBox(buffer);//这样就不会乱了
你for(int i=0;i<1024; i++)
{
TRACE("%02x ",buffer[i]);
}
看看,也有可能和是有符号型有关系
int rcv = recv(s,buffer,strlen(buffer),0);
strlen(buffer) 是 buffer的字符串长度, 你那种情况应该是编译器把buffer初始化成'\0', strlen(buffer) = 0recv 的 第三个参数需要的是buffer的长度
------------
严格写,其实应该这样char buffer[1024] = {0}; // 将 buffer 的没个字符初始化为 '\0' ; 否则buffer的初始值根据编译器的不同可能不同
int rcv = recv(s,buffer,sizeof(buffer),0); 搞顶了就给分哈~