我每次只有第一次才能收到信息,第二次就显不出来
客户端
static DWORD WINAPI ThreadProc(LPVOID param)
{
CClientView *pClientView=(CClientView *)param;
int Status;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
Status = WSAStartup(wVersionRequested,&wsaData);
if (Status != 0)
{
AfxMessageBox("初始化失败!");
PostQuitMessage(0);
return 0;
}
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
AfxMessageBox("建立Client Socket失败!");
PostQuitMessage(0);
return 0;
}
pClientView->client.sin_family=AF_INET;
pClientView->client.sin_addr.S_un.S_addr=inet_addr("192.168.0.21");
pClientView->client.sin_port=htons(1200);
if(connect(s,(struct sockaddr FAR *)&pClientView->client,sizeof(pClientView->client)))
{
AfxMessageBox("建立连接失败!");
closesocket(s);
PostQuitMessage(0);
return 0;
}
AfxMessageBox("建立连接成功!!");
return 0;
}void CClientView::OnViewConnect()
{
hThread = CreateThread(NULL,0,ThreadProc,(LPVOID)this,0,&ThreadID);
}void CClientView::OnViewSend()
{
int slength;
slength=send(s,buffer,20,MSG_DONTROUTE);
if(slength!=20||slength==SOCKET_ERROR)
{
int errs=WSAGetLastError();
AfxMessageBox(_T("发送消息失败"));
}
}
以下是服务器端
static DWORD WINAPI ThreadProc(LPVOID param)
{ SOCKET sTempSocket;
int nAddrLength=sizeof(server);
sTempSocket=accept(s,(LPSOCKADDR)&server,&nAddrLength);
if(sTempSocket==INVALID_SOCKET)
{
closesocket(s);
sTempSocket=NULL;
AfxMessageBox("接收初始化失败!");
}
AfxBeginThread((AFX_THREADPROC)ThreadProc,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
if(recv(sTempSocket,buffer,20,MSG_PEEK)==SOCKET_ERROR)
{
AfxMessageBox("接收数据失败!");
}
AfxMessageBox(buffer);
return 0;
} CMainFrame::~CMainFrame()
{
}int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
} if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
} // TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar); int Status;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
Status = WSAStartup(wVersionRequested,&wsaData);
if (Status != 0)
{
AfxMessageBox("初始化失败!");
PostQuitMessage(0);
return 0;
}
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
AfxMessageBox("建立Server Socket失败!");
PostQuitMessage(0);
return 0;
}
server.sin_family=AF_INET;
server.sin_addr.S_un.S_addr=INADDR_ANY;
server.sin_port=htons(1200);
int ret=0;
ret=bind(s,(LPSOCKADDR)&server,sizeof(server));
if(ret==SOCKET_ERROR)
{
closesocket(s);
AfxMessageBox("Bind Error");
return 0;
} int nRet;
nRet=listen(s,2);
if(nRet==SOCKET_ERROR)
{
closesocket(s);
AfxMessageBox("监听错误!");
return 0;
}
AfxBeginThread((AFX_THREADPROC)ThreadProc,(LPVOID)this,THREAD_PRIORITY_NORMAL,0,0,NULL);
return 0;
}
客户端
static DWORD WINAPI ThreadProc(LPVOID param)
{
CClientView *pClientView=(CClientView *)param;
int Status;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
Status = WSAStartup(wVersionRequested,&wsaData);
if (Status != 0)
{
AfxMessageBox("初始化失败!");
PostQuitMessage(0);
return 0;
}
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
AfxMessageBox("建立Client Socket失败!");
PostQuitMessage(0);
return 0;
}
pClientView->client.sin_family=AF_INET;
pClientView->client.sin_addr.S_un.S_addr=inet_addr("192.168.0.21");
pClientView->client.sin_port=htons(1200);
if(connect(s,(struct sockaddr FAR *)&pClientView->client,sizeof(pClientView->client)))
{
AfxMessageBox("建立连接失败!");
closesocket(s);
PostQuitMessage(0);
return 0;
}
AfxMessageBox("建立连接成功!!");
return 0;
}void CClientView::OnViewConnect()
{
hThread = CreateThread(NULL,0,ThreadProc,(LPVOID)this,0,&ThreadID);
}void CClientView::OnViewSend()
{
int slength;
slength=send(s,buffer,20,MSG_DONTROUTE);
if(slength!=20||slength==SOCKET_ERROR)
{
int errs=WSAGetLastError();
AfxMessageBox(_T("发送消息失败"));
}
}
以下是服务器端
static DWORD WINAPI ThreadProc(LPVOID param)
{ SOCKET sTempSocket;
int nAddrLength=sizeof(server);
sTempSocket=accept(s,(LPSOCKADDR)&server,&nAddrLength);
if(sTempSocket==INVALID_SOCKET)
{
closesocket(s);
sTempSocket=NULL;
AfxMessageBox("接收初始化失败!");
}
AfxBeginThread((AFX_THREADPROC)ThreadProc,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
if(recv(sTempSocket,buffer,20,MSG_PEEK)==SOCKET_ERROR)
{
AfxMessageBox("接收数据失败!");
}
AfxMessageBox(buffer);
return 0;
} CMainFrame::~CMainFrame()
{
}int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
} if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
} // TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar); int Status;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
Status = WSAStartup(wVersionRequested,&wsaData);
if (Status != 0)
{
AfxMessageBox("初始化失败!");
PostQuitMessage(0);
return 0;
}
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
AfxMessageBox("建立Server Socket失败!");
PostQuitMessage(0);
return 0;
}
server.sin_family=AF_INET;
server.sin_addr.S_un.S_addr=INADDR_ANY;
server.sin_port=htons(1200);
int ret=0;
ret=bind(s,(LPSOCKADDR)&server,sizeof(server));
if(ret==SOCKET_ERROR)
{
closesocket(s);
AfxMessageBox("Bind Error");
return 0;
} int nRet;
nRet=listen(s,2);
if(nRet==SOCKET_ERROR)
{
closesocket(s);
AfxMessageBox("监听错误!");
return 0;
}
AfxBeginThread((AFX_THREADPROC)ThreadProc,(LPVOID)this,THREAD_PRIORITY_NORMAL,0,0,NULL);
return 0;
}
解决方案 »
- vs2008 如何为一个类添加 add windows message handle??
- 项目经验
- 为什么CListBox::GetText只能读去第一个字符?
- 如何从BYTE中提取某一位
- [新手]要把内存中的数字或字母放到对话框的 Editbox 里要怎么做?
- 我是菜鸟,各位高手帮帮忙。
- 有没有可视化的 html 编辑 控件阿
- (送分)关于编译环境vc++6 (dev) 打开ResoureView时提示关于afxres.h等的错误。
- 请问如何实现SSL数据传输?
- 有谁知道这个ip:61.159.128.37是哪里的???
- ddk中怎样从文件的HANDLE得到文件名?
- 高分请教关于图像识别的问题
建议在static DWORD WINAPI ThreadProc(LPVOID param)函数里的recv()部分改成:
while(1)
{
if(recv(sTempSocket,buffer,20,MSG_PEEK)==SOCKET_ERROR)
{
AfxMessageBox("接收数据失败!");
break;
}
AfxMessageBox(buffer);
}
while (TRUE)
{
nRet = recv(sTempSocket, buffer, 20, 0);
if(nRet==SOCKET_ERROR)
{
AfxMessageBox("接收数据失败!");
break;
}
else if (nRet!=0)
AfxMessageBox(buffer);
}