问题是这样的,两端连接成功了,然后我服务器端发送给客户端的时候,客户端可以显示出来。而客户端发送给服务器端的时候却显示不出来。
两个的发送代码如下void CSocketServerDlg::OnSent()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_sInputText.TrimLeft(" ");//去掉字符串前面的空格字符
m_sInputText.TrimRight(" ");//去掉字符串后面的空格字符
int j = 0;
char chardata[1024];
memset(chardata,0,1024);
int datalength ;
int templength = m_sInputText.GetLength();
SOCKET tempsocket;
memcpy(chardata,m_sInputText.GetBuffer(templength),templength);
//memccpy(chardata,m_sInputText.GetBuffer(templength),templength);
datalength=m_connectionList.GetCount();
//将一个客户端发送的消息传递到其他客户端去
for(j=0;j<datalength;j++)
{
tempsocket=m_connectionList.GetAt(m_connectionList.FindIndex(j));
send(tempsocket,chardata,strlen(chardata),0);
}
SetDlgItemText(IDC_INPUT,"");
}客户端响应代码如下LRESULT CSocketClientDlg::OnClientMessage(WPARAM wParam, LPARAM lParam)
{
CEdit * output=NULL;
char s[1024];
int len;
static int i=0;
switch(lParam)
{
case FD_CONNECT:
len=GetLastError();
if(len!=0)
{
AfxMessageBox("Error in Connecting");
}
else
{
m_List.InsertString(i,"Having connected to server!\n");
m_List.SetCurSel (i);
i++;
}
return 0;
case FD_READ:
len=recv(m_client.m_hSocket,s,1024,0);
s[len]='\n';
s[len+1]=NULL;
m_List.InsertString(i,s);
m_List.SetCurSel (i);
i++;
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
m_List.InsertString(i,"An network error has occured,the connection is dropped");
m_List.SetCurSel (i);
i++;
closesocket(m_client.m_hSocket);
return 0;
}
return 0;
}服务器端响应代码如下LRESULT CSocketServerDlg::OnServerMessage(WPARAM wParam, LPARAM lParam)
{
SOCKET socket,ts;
int length,i;
char s[1024];
int len;
static int ii=1;
switch(lParam)
{
case FD_ACCEPT:
socket= accept(m_server.m_hSocket,NULL,NULL);
length=m_connectionList.GetCount();
for(i=0;i<length;i++)
{
ts=m_connectionList.GetAt(m_connectionList.FindIndex(i));
s[0]=NULL;
strcat(s,"一个客户端已连接\n");
send(ts,s,strlen(s),0);
}
m_List.InsertString(ii,"一个客户端已连接\n");
m_List.SetCurSel (ii);
ii++;
//随时跟踪滚动条的位置
m_connectionList.AddHead(socket);
return 0;
case FD_READ:
length=m_connectionList.GetCount();
for(i=0;i<length;i++)
{
socket=m_connectionList.GetAt(m_connectionList.FindIndex(i));
if(socket==wParam)
{
len=recv(socket,s,1024,0);
s[len]='\n';
s[len+1]=NULL;
m_List.InsertString(ii,s);
m_List.SetCurSel (ii);
ii++;
return 0;
}
}
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
m_List.InsertString(ii,"An network error has occured,the connection is dropped");
m_List.SetCurSel (ii);
ii++;
return 0;
}
return 0;
}
两个的发送代码如下void CSocketServerDlg::OnSent()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_sInputText.TrimLeft(" ");//去掉字符串前面的空格字符
m_sInputText.TrimRight(" ");//去掉字符串后面的空格字符
int j = 0;
char chardata[1024];
memset(chardata,0,1024);
int datalength ;
int templength = m_sInputText.GetLength();
SOCKET tempsocket;
memcpy(chardata,m_sInputText.GetBuffer(templength),templength);
//memccpy(chardata,m_sInputText.GetBuffer(templength),templength);
datalength=m_connectionList.GetCount();
//将一个客户端发送的消息传递到其他客户端去
for(j=0;j<datalength;j++)
{
tempsocket=m_connectionList.GetAt(m_connectionList.FindIndex(j));
send(tempsocket,chardata,strlen(chardata),0);
}
SetDlgItemText(IDC_INPUT,"");
}客户端响应代码如下LRESULT CSocketClientDlg::OnClientMessage(WPARAM wParam, LPARAM lParam)
{
CEdit * output=NULL;
char s[1024];
int len;
static int i=0;
switch(lParam)
{
case FD_CONNECT:
len=GetLastError();
if(len!=0)
{
AfxMessageBox("Error in Connecting");
}
else
{
m_List.InsertString(i,"Having connected to server!\n");
m_List.SetCurSel (i);
i++;
}
return 0;
case FD_READ:
len=recv(m_client.m_hSocket,s,1024,0);
s[len]='\n';
s[len+1]=NULL;
m_List.InsertString(i,s);
m_List.SetCurSel (i);
i++;
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
m_List.InsertString(i,"An network error has occured,the connection is dropped");
m_List.SetCurSel (i);
i++;
closesocket(m_client.m_hSocket);
return 0;
}
return 0;
}服务器端响应代码如下LRESULT CSocketServerDlg::OnServerMessage(WPARAM wParam, LPARAM lParam)
{
SOCKET socket,ts;
int length,i;
char s[1024];
int len;
static int ii=1;
switch(lParam)
{
case FD_ACCEPT:
socket= accept(m_server.m_hSocket,NULL,NULL);
length=m_connectionList.GetCount();
for(i=0;i<length;i++)
{
ts=m_connectionList.GetAt(m_connectionList.FindIndex(i));
s[0]=NULL;
strcat(s,"一个客户端已连接\n");
send(ts,s,strlen(s),0);
}
m_List.InsertString(ii,"一个客户端已连接\n");
m_List.SetCurSel (ii);
ii++;
//随时跟踪滚动条的位置
m_connectionList.AddHead(socket);
return 0;
case FD_READ:
length=m_connectionList.GetCount();
for(i=0;i<length;i++)
{
socket=m_connectionList.GetAt(m_connectionList.FindIndex(i));
if(socket==wParam)
{
len=recv(socket,s,1024,0);
s[len]='\n';
s[len+1]=NULL;
m_List.InsertString(ii,s);
m_List.SetCurSel (ii);
ii++;
return 0;
}
}
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
m_List.InsertString(ii,"An network error has occured,the connection is dropped");
m_List.SetCurSel (ii);
ii++;
return 0;
}
return 0;
}
解决方案 »
- 设置已知窗口句柄的焦点
- 问一个关于任务管理器的小问题 潜心研究PDF,请进来
- ping程序问题
- vc++安装问题 急!!!!!!!!!!在线等
- 怎样设定SDI/MDI的MainFrame的初始大小,谢谢!
- 问一个关于抓包的问题
- Edit控件内能否实现自动完成功能?
- CListCtrl的简单问题:我用InsertColumn加了一些列,但我想删掉它们,我该????
- 现在广播一个通知:今天下午2:00,konfyt(不甜的水果唐)将结了他的帖子,如果你们对他的问题有兴趣,去看看吧!(回答好了,有分!:))
- 关于开发一个数据库控件问题?
- 一个最基础的问题搞糊涂了,类里构造函数中的指针。
- VC中保存为wav文件格式问题求解
这个没有问题,因为我m_List里面在初始化的时候使用了第一行。所以这里从第二行开始。
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_sInputText.TrimLeft(" ");//去掉字符串前面的空格字符
m_sInputText.TrimRight(" ");//去掉字符串后面的空格字符
m_client.SendString(m_sInputText.GetBuffer(0),m_sInputText.GetLength());
SetDlgItemText(IDC_INPUT,"");
}