大虾们帮帮忙
服务器端nPort =34567;
int j = m_Listen.Create(nPort);
int i = m_Listen.Listen(3);
if( (i == 0)||(j ==0))
MessageBox("Listen error");int i = m_Listen.Accept(recSo);在客户端nPort =34567;
m_Connect.Create();
int i = m_Connect.Connect("192.168.166.216",nPort);
连接是成功的
服务器也可以给客户端发消息
为什么客户端不能给服务器发消息呢!
谢谢各位大虾了、!!!
服务器端nPort =34567;
int j = m_Listen.Create(nPort);
int i = m_Listen.Listen(3);
if( (i == 0)||(j ==0))
MessageBox("Listen error");int i = m_Listen.Accept(recSo);在客户端nPort =34567;
m_Connect.Create();
int i = m_Connect.Connect("192.168.166.216",nPort);
连接是成功的
服务器也可以给客户端发消息
为什么客户端不能给服务器发消息呢!
谢谢各位大虾了、!!!
应该是从i读取数据,不行先用WSAGetLastError()看看是什么原因。
tcp连接一旦建立成功,跟是否有监听是没有关系的
你说服务器可以给客户端发消息
那么问题肯定是出在你客户端发送消息时使用了错误的socket从你给出的代码根本看不出问题
你最好多贴点出来
可以帮你找找错误
谢谢各位大虾。
int nBuf;
int iSendMsgBytes;
mMsgFlag = 0 ;
m_SMessage.GetWindowText(strMessage);
nBuf = strMessage.GetLength();
iSendMsgBytes = m_Connect.Send(strMessage.GetBuffer(nBuf),nBuf);
if( iSendMsgBytes==0 )
MessageBox("send error");
所以在recSo对象的类中需要实现OnReceive事件,在那里用receive方法收数据。
你是这样做的么?
在服务器端的OnReceive事件中: CString Message;
char buff[100]={0};
int nBuf = 100;
int ret=0;
ret=recSo.Receive(Message.GetBuffer(nBuf),nBuf)
我但不跟踪,是客户端发信息没问题。
就是接收不了程序执行到ret=recSo.Receive(Message.GetBuffer(nBuf),nBuf)就出错了。
谢谢各位大虾!!
别用CString,直接用char*就可以了,就使用你上面定义的buff变量
CString Message;
char buff[100]={0};
int nBuf = 100;
int ret=0;
ret=recSo.Receive(buff,nBuf);
Message=buff;
也是不好用啊。还是到ret=recSo.Receive(buff,nBuf);
就出错了。
{
CSocket socket;
socket.Create(7802);
socket.Connect("127.0.0.1", 7801);
char sBuf[32];
lstrcpy(sBuf, "你好吗?");
socket.Send(sBuf,32);
socket.Close();
}void CRecvDlg::OnButtonSend() //服务器端,接收消息
{
CSocket ls_socket;//侦听套接字
CSocket co_socket;//连接套接字
ls_socket.Create(7801, SOCK_STREAM);
ls_socket.Listen(1);
ls_socket.Accept(co_socket);
char sBuf[32];
co_socket.Receive(sBuf, 32);
AfxMessageBox(sBuf,MB_OK);
co_socket.Close();
}
所以每个套接字的OnReceive都会去调用对话框的onreceive函数。
在这个函数里:
CString Message;
char buff[100]={0};
int nBuf = 100;
int ret=0;
ret=recSo.Receive(buff,nBuf);
Message=buff;
我现在每执行到ret=recSo.Receive(buff,nBuf);
就出错了。
strMessage.ReleaseBuffer();你做了吗,要不就会出现问题的。用CString Message;
接受是没有问题的。
{
int nRec;
int buf=1024;
CString strRec;
nRec=m_connect.Receive(strRec.GetBuffer(buf),buf,0);
strRec.ReleaseBuffer();
strRec=strRec.Left(nRec);
m_listmsg.InsertString(-1,strRec);
}
void CServerDlg::OnSend()
{
UpdateData(TRUE);
m_chat="server:"+m_chat;
int m_nLength=m_chat.GetLength();
m_connect.Send(m_chat.GetBuffer(m_nLength),m_nLength,0);
m_chat.ReleaseBuffer();
m_listmsg.InsertString(-1,m_chat);
m_chat="";
UpdateData(FALSE);
}
我是这么做的没有问题
要判断accept那一步必须返回非零,表示成功了,才可以receive,否则跳出