今天在EVC上改了一个TCP/IP的程序 目的是把打开一个文件 把内容显示到编辑框里 然后发送到PC上 在大家的帮助下 功能基本实现了 现在的情况是显示 Read OK 但没显示到编辑框里 这还是其次 因为可以发送了 但问题主要是只能发送文件的第一个字符 大家帮忙看看啊
ClientExDlg::OnSendfile()
{
CFile MyFile;
TCHAR str[100];
DWORD count;
CHAR szBuf[256];
UpdateData(true);
CString s;
MyFile.Open (_T("\\qwe.dat"),CFile::modeRead);
long sendlen =MyFile.GetLength() ; //得到文件长度
count=MyFile.Read ( szBuf, sendlen); //读文件
s.Format(_T("%S"),szBuf); //注意是大写的S
m_SendEdit=s; //将文件内容输出到编辑框
MyFile.Close (); //关闭文件
UpdateData(false); //更新显示
AfxMessageBox(_T("Read OK")); //输出读成功消息
}
qwe的内容是123,但是pc只能收到1
TCP/IP原来的程序是在编辑框输入字符 然后点 发送 的Button就发出去了 我是想着把文件的内容读到那个编辑框里 然后在点 发送 的Button发送
void CTCPClientExDlg::OnSend()
{
int nErrorCode;
int cnt = 0, actlen = 0;
if (m_Socket == NULL)
return;
UpdateData(TRUE);
int sendlen = m_SendEdit.GetLength(); /* 取得输入字符串长度 */
char *psendbuff = new char[sendlen];
for(int i = 0; i < sendlen;i++)
psendbuff = (char)m_SendEdit.GetAt(i); /* 转换为单字节字符 */
while(cnt < sendlen)
{ // 发送数据
actlen = send(m_Socket, psendbuff + cnt, sendlen - cnt, 0);
if (actlen == SOCKET_ERROR )
{
MessageBox(_T("TCP 数据发送失败!"));
nErrorCode = WSAGetLastError();
delete[] psendbuff;
return;
}
cnt = cnt + actlen;
if (cnt < sendlen)
Sleep(1000);
}
delete[] psendbuff;
}
楼主,你这个问题估计还是UNICODE编码的问题。SOCKET发送最好不用UNICODE。
现象是只能发送一个,但实际上可能是发送或者接收时被截断了。
我在CTCPClientExDlg::OnSend() 函数后面加上
Sleep(1000);
closesocket(m_Socket);
还是只能收到一个字符 然后就是就是连接断开啊
把打开一个文件 把内容显示到编辑框里 m_SendEdit是在类向导中 你的编辑框 要设置的
CFile MyFile;
CString m_FileName;
CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,_T("All Files(*.*)|*.*||"));
if(FileDlg.DoModal()==IDOK)
{
m_FileName=FileDlg.GetPathName();
MyFile.Open (m_FileName,CFile::modeRead); //打开文件
DWORD sendlen =MyFile.GetLength() ; //得到文件长度
CHAR *szBuf=new CHAR [sendlen];//开辟存储空间
MyFile.Read ( szBuf, sendlen); //读文件
m_SendEdit.Format(_T("%S"),szBuf); //注意是大写的S
MyFile.Close (); //关闭文件
UpdateData(false); //更新编辑框显示
AfxMessageBox(_T("Read OK")); //输出读成功消息
delete []szBuf;//清除存储空间
}
把编辑框里的内容 然后发送到PC上 m_SendEdit是在类向导中 你的编辑框 要设置的
int nErrorCode;
int cnt = 0, actlen = 0;
if (m_Socket == NULL)
return;
int sendlen = m_SendEdit.GetLength(); //取得输入字符串长度
char *psendbuff = new char[sendlen];
for(int i = 0; i < sendlen;i++)
psendbuff = (char)m_SendEdit.GetAt(i); // 转换为单字节字符
while(cnt < sendlen)
{
actlen = send(m_Socket, psendbuff + cnt, sendlen - cnt, 0);
if (actlen == SOCKET_ERROR )
{
MessageBox(_T("TCP 数据发送失败!"));
nErrorCode = WSAGetLastError();
delete[] psendbuff;
return;
}
cnt = cnt + actlen;
if (cnt < sendlen)
Sleep(1000);
}
delete[] psendbuff;
我重新建了一个工程 只实现读取文件内容到编辑框 可是编辑框还是只有文件内容的第一个字符 程序有问题?
引用: 引用楼主 l840828 的回复:
今天在EVC上改了一个TCP/IP的程序 目的是把打开一个文件 把内容显示到编辑框里 然后发送到PC上 在大家的帮助下 功能基本实现了 现在的情况是显示? Read OK? 但没显示到编辑框里 这还是其次 因为可以发送了 但问题主要是只能发送文件的第一个字符 大家帮忙看看啊
ClientExDlg::OnSendfile()
{
? CFile MyFile;
? TCHAR str[100];
? DWORD count;
? CHAR? szBuf[256];
? UpdateData(true);
? CString s;
? MyFile.Open (_T("\\qwe.dat"),CFile::modeRead);
? long sendlen =MyFile.GetLength() ;? ? ? ? ? ? ? //得到文件长度
? count=MyFile.Read ( szBuf,? sendlen);? ? ? ? ? //读文件
? s.Format(_T("%S"),szBuf);? ? ? ? ? ? ? ? ? ? ? //注意是大写的S
? m_SendEdit=s;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //将文件内容输出到编辑框
? MyFile.Close ();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //关闭文件
? UpdateData(false);? ? ? ? ? ? ? ? ? ? ? ? ? ? //更新显示
? AfxMessageBox(_T("Read OK"));? ? ? ? ? ? ? ? ? //输出读成功消息? ?
}
qwe的内容是123,但是pc只能收到1
先讲显示的问题,楼主你直接用MessageBox把s字符串显示出来看看是不是你想要的内容,在考虑是否是编辑框没刷新显示。
引用: 引用 10 楼 wliaoc 的回复:
引用楼主 l840828 的回复:
今天在EVC上改了一个TCP/IP的程序 目的是把打开一个文件 把内容显示到编辑框里 然后发送到PC上 在大家的帮助下 功能基本实现了 现在的情况是显示? Read OK? 但没显示到编辑框里 这还是其次 因为可以发送了 但问题主要是只能发送文件的第一个字符 大家帮忙看看啊
ClientExDlg::OnSendfile()
{
? CFile MyFile;
? TCHAR str[100];
? DWORD count;
? CHAR? szBuf[256];
? UpdateData(true);
? CString s;
? MyFile.Open (_T("\\qwe.dat"),CFile::modeRead);
? long sendlen =MyFile.GetLength() ;? ? ? ? ? ? ? //得到文件长度
? count=MyFile.Read ( szBuf,? sendlen);? ? ? ? ? //读文件
? s.Format(_T("%S"),szBuf);? ? ? ? ? ? ? ? ? ? ? //注意是大写的S
? m_SendEdit=s;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //将文件内容输出到编辑框
? MyFile.Close ();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //关闭文件
? UpdateData(false);? ? ? ? ? ? ? ? ? ? ? ? ? ? //更新显示
? AfxMessageBox(_T("Read OK"));? ? ? ? ? ? ? ? ? //输出读成功消息? ?
}
qwe的内容是123,但是pc只能收到1
先讲显示的问题,楼主你直接用MessageBox把s字符串显示出来看看是不是你想要的内容,在考虑是否是编辑框没刷新显示。
我把最后一句改成 MessageBox(s)
显示的只有文件内容的第一个字符 到底是什么地方出问题了呢
设置断点跟踪一下,这样比较好定位问题。
另外,你试试看把那个大写的S换成小写的试试看。
你用UltraEdit打开qwe.dat文件,以二进制的方式显示,贴出来让大家看看。
谢谢 sunrain_hjb 就是把大写的S换成小写的就对了那句程序后面还来个注释 //注意是大写的S 残念