wxWidget wxSockBase获取不到内容

Tody Guo 2011-08-17 06:45:13
大家好,为何我的程序读不到内容啊?用telnet 只能获取到一个字符。
但是我用下面的程序,void MACSvrFrm::getMsg(wxSocketBase *sock) 怎么弄都不能读取到内容?请高手帮忙啊?
wxWidget程式

///-----------------------------------------------------------------
///
/// @file MACSvrFrm.cpp
/// @author tody_guo
/// Created: 2011-8-16 11:33:59
/// @section DESCRIPTION
/// MACSvrFrm class implementation
///
///------------------------------------------------------------------

#include "MACSvrFrm.h"

//Do not add custom headers between
//Header Include Start and Header Include End
//wxDev-C++ designer will remove them
////Header Include Start
////Header Include End

//----------------------------------------------------------------------------
// MACSvrFrm
//----------------------------------------------------------------------------
//Add Custom Events only in the appropriate block.
//Code added in other places will be removed by wxDev-C++
////Event Table Start
BEGIN_EVENT_TABLE(MACSvrFrm,wxFrame)
////Manual Code Start
EVT_SOCKET(SERVER_ID, MACSvrFrm::OnServerEvent)
EVT_SOCKET(SOCKET_ID, MACSvrFrm::OnSocketEvent)
////Manual Code End

EVT_CLOSE(MACSvrFrm::OnClose)
EVT_BUTTON(ID_WXBUTTON2,MACSvrFrm::WxButton2Click)
EVT_BUTTON(ID_WXBUTTON1,MACSvrFrm::WxButton1Click)
END_EVENT_TABLE()
////Event Table End

MACSvrFrm::MACSvrFrm(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
: wxFrame(parent, id, title, position, size, style)
{
CreateGUIControls();
}

MACSvrFrm::~MACSvrFrm()
{
delete m_server;
}

void MACSvrFrm::CreateGUIControls()
{
//Do not add custom code between
//GUI Items Creation Start and GUI Items Creation End
//wxDev-C++ designer will remove them.
//Add the custom code before or after the blocks
////GUI Items Creation Start

WxButton1 = new wxButton(this, ID_WXBUTTON1, wxT("&Start"), wxPoint(508, 13), wxSize(75, 25), 0, wxDefaultValidator, wxT("WxButton1"));

WxMemo1 = new wxTextCtrl(this, ID_WXMEMO1, wxEmptyString, wxPoint(3, 4), wxSize(497, 314), wxTE_MULTILINE, wxDefaultValidator, wxT("WxMemo1"));
WxMemo1->SetMaxLength(0);
WxMemo1->SetFocus();
WxMemo1->SetInsertionPointEnd();

WxStatusBar1 = new wxStatusBar(this, ID_WXSTATUSBAR1);
WxStatusBar1->SetFieldsCount(3);
WxStatusBar1->SetStatusText(wxT("Status"),0);
WxStatusBar1->SetStatusText(wxT("Total: 0"),1);
WxStatusBar1->SetStatusText(wxT("Says: "),2);
int WxStatusBar1_Widths[3];
WxStatusBar1_Widths[0] = 150;
WxStatusBar1_Widths[1] = 150;
WxStatusBar1_Widths[2] = -1;
WxStatusBar1->SetStatusWidths(3,WxStatusBar1_Widths);

WxButton2 = new wxButton(this, ID_WXBUTTON2, wxT("E&xit"), wxPoint(508, 291), wxSize(75, 25), 0, wxDefaultValidator, wxT("WxButton2"));

SetStatusBar(WxStatusBar1);
SetTitle(wxT("MAC Reciever"));
SetIcon(wxNullIcon);
SetSize(8,8,600,369);
Center();

////GUI Items Creation End
}

void MACSvrFrm::OnClose(wxCloseEvent& event)
{
Destroy();
}

/*
* WxButton1Click
*/
void MACSvrFrm::WxButton1Click(wxCommandEvent& event)
{
// insert your code here
wxIPV4address addr;
addr.Service(8086);

m_server = new wxSocketServer(addr);
if (! m_server->Ok() )
{
WxStatusBar1->SetStatusText(wxT("Listening Failed!"),0);
return;
}else
{
WxStatusBar1->SetStatusText(wxT("Server is Running..."),0);
WxButton1->Enable(false);
}
// Setup the event handler and subscribe to connection events
m_server->SetEventHandler(*this, SERVER_ID);
m_server->SetNotify(wxSOCKET_CONNECTION_FLAG);
m_server->Notify(true);
}

void MACSvrFrm::OnServerEvent(wxSocketEvent& event)
{
wxSocketBase *sock;
switch(event.GetSocketEvent())
{
case wxSOCKET_CONNECTION : WxStatusBar1->SetStatusText("Says: wxSOCKET_CONNECTION",2); break;
default : WxStatusBar1->SetStatusText("Says: Unexpected event!",2); break;
}

sock = m_server->Accept(false);

if (sock)
{
WxMemo1->AppendText(_("New client connection accepted\n"));
}
else
{
WxMemo1->AppendText(_("Error: couldn't accept a new connection\n"));
return;
}

sock->SetEventHandler(*this, SOCKET_ID);
sock->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG);
sock->Notify(true);
TotalConn++;
wxString s1 ;
s1.Printf("%ld", TotalConn);
WxStatusBar1->SetStatusText("Total: " + s1, 1);

}

void MACSvrFrm::OnSocketEvent(wxSocketEvent& event)
{
wxSocketBase *sock = event.GetSocket();

switch(event.GetSocketEvent())
{

case wxSOCKET_INPUT : WxStatusBar1->SetStatusText("Says: wxSOCKET_INPUT",2);break;
case wxSOCKET_LOST : WxStatusBar1->SetStatusText("Says: wxSOCKET_LOST",2);break;
default : WxStatusBar1->SetStatusText("Says: Unexpected event!",2);break;
}

// Now we process the event
switch(event.GetSocketEvent())
{
case wxSOCKET_INPUT:
{
sock->SetNotify(wxSOCKET_LOST_FLAG);
getMsg(sock);
sock->SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG);
break;
}
case wxSOCKET_LOST:
{
sock->Destroy();
break;
}
default: ;
}
}

/*
* WxButton2Click
*/
void MACSvrFrm::WxButton2Click(wxCommandEvent& event)
{
// insert your code here
Close(true);
}

void MACSvrFrm::getMsg(wxSocketBase *sock)
{
wxString s;
char *buf[512];
int len;

len = sock->Read(buf, 512).LastCount();
s.Printf("%s -> %d", buf, len);

WxMemo1->AppendText(s);

}


发送消息的代码。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void error(char *str)
{
fprintf(stderr,"%s Error\n",str);
exit(1);
}

int main(int argc, char *argv[])
{
WSADATA WsaData;
SOCKET sfd = 0;
struct hostent *host_name;
int len = 0;
char buf[512];

struct sockaddr_in client;
if (WSAStartup(MAKEWORD(1,1),&WsaData) == -1)
{
error("WSAStartup()");
}

if((host_name=gethostbyname(argv[1]))==0)
{
perror("Error resolving local host\n");
exit(1);
}

sfd = socket(AF_INET,SOCK_STREAM,0);
if (sfd == -1)
{
error("socket()");
}

memset(&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_port = htons(atoi(argv[2]));
client.sin_addr.s_addr = ((struct in_addr*)(host_name->h_addr))->s_addr;

if ( -1 == connect(sfd,(struct sockaddr *)&client,sizeof(client)))
{
error("connect");
}

strcpy(buf, argv[3]);

if ( send(sfd, buf, sizeof(buf), 0) <= 0)
{
error("send()");
}

printf("Sent Msg: %s", argv[3]);

close(sfd);
WSACleanup();

return 0;
}

...全文
70 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlanBruce 2011-08-18
  • 打赏
  • 举报
回复
不懂,帮顶。。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧