客户端服务器 - (TCP)
问题描述:
我想从客户端发送一些文本到服务器。 我也想显示时间戳,以便通知收到消息的时间。 当我尝试发送时间它发送一个空白。但字符串的其余部分得到显示。客户端服务器 - (TCP)
这里我从客户端发送代码:
void ClientSock::OnConnect(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(nErrorCode)
{
AfxMessageBox(_T("Connection Failure."));
Close();
}
else
{
time_t clock;
time(&clock);
char min[30] = {0};
char s = ctime_s(min,sizeof(min),&clock);
char text[100] = {0};
char user[10] = {"UserName"};
int n = m_pDlg->GetDlgItemText(ID_REQUEST,text, 100);
Send(text,n);
Send(user,sizeof(user));
Send(min,sizeof(min));
//m_pDlg->SetDlgItemText(ID_REQUEST,min);
AfxMessageBox(_T(min));
}
}
和继承人如何在服务器的控制台即时打印:
SOCKET client;
char text[100] = {0};
char user[10] = {0};
char min[30] = {0};
int n,m;
//(here the server waits for the client and accepts connection requests)
client = accept(server, NULL, NULL);
//(receiving text from the client)
n = recv(client, text, 99, 0);
recv(client, user, 9, 0);
m = recv(client, min, 29, 0);
if(n > 0 && m > 0)
{
printf("%s:: %s:%s\n",min,user,text);
}
else
printf("ERROR:Communication Failure.\n");
答
一个TCP连接应被视为字节流。您将它视为具有类型信息的对象流。
在您的3次发送之后,已经传输的字节将是例如。
ABC \ 0UserName \ 0 \ 0Time \ 0 - 总共19个字节。
然后,您读取99个字节,并将所有数据存储到“文本”中,并且在您的下一次读取中没有任何内容留在流中。
您需要在文本本身之前发送文本的长度,或者您需要在接收端读取“数据”并扫描例如一个0结束符来提取流的3个逻辑元素。
当我发送文本。它显示::用户名:文本。它不打印时间。 – Pavitar 2011-03-07 13:13:11
再次阅读我的答案,它告诉你为什么。 – Erik 2011-03-07 13:14:34
非常感谢你+1。在对我的代码进行了一些实验后,现在我明白了你的意思。 :) – Pavitar 2011-04-20 04:37:30