我的任务是创建一个客户端网络通信服务器-mfc-应用程序。这意味着我不允许更改服务器-mfc应用程序代码,但必须使web可以与该服务器-mfc应用程序对话。该服务器-mfc-应用程序使用套接字,可以与客户端-mfc-应用程序通信。
我创建了一个客户端-web可以连接到服务器-mfc-app成功(server-mfc-app接受连接),但是当客户端web向服务器发送消息时-mfc-app: server-mfc-app知道客户端-web发送消息,但是它可以通过::ReceiveData(SOCKET hSocket)获得消息(我运行调试模式服务器-mfc-app来监视所有功能)。
服务器-MFC-应用程序代码:
ON_MESSAGE(MSG_ASYNC, OnAsyncSelect)
LRESULT CChatServerDlg::OnAsyncSelect(WPARAM wParam, LPARAM lParam)
{
if (WSAGETSELECTERROR(lParam) != 0)
{
}
else
{
switch(WSAGETSELECTEVENT(lParam))
{
case FD_READ:
ReceiveData(wParam);
break;
case FD_ACCEPT:
{
CUserSocket *pClient = AcceptConnection();
if(pClient)
{
CString sReport;
sReport.Format(_T("Có kết nối từ IP: %s , Port: %d"),
pClient->GetRemoteIpAddr(),pClient->GetRemotePort());
m_lbStatus.AddString(sReport);
SendData(pClient->GetSocket(),_T("Server sẵn sàng"));
m_groupNewUsers.AddUser(pClient);
}
}
break;
case FD_CLOSE:
CUserGroup *gr = m_groupList.FindGroup(wParam);
if (gr!=NULL)
gr->RemoveUser(wParam);
closesocket(wParam);
OnLbnSelchangeGrouplist();
m_lbStatus.AddString(_T("Đã đóng kết nối"));
break;
}
}
return 0L;
}
void CChatServerDlg::ReceiveData(SOCKET hSocket)
{
char szBuf[MAX_LEN];
int nByteRe = recv(hSocket, szBuf, MAX_LEN, 0);//always successful
// with client-mfc-app, and always unsuccessful with client-web below.
if (nByteRe<=0)
return;
wchar_t wch[MAX_LEN];
CString s = _T("");
MultiByteToWideChar(CP_UTF8,0,szBuf,nByteRe,wch,nByteRe/2);
wch[nByteRe/2] = '\0';
s += wch;
SolveRequest(hSocket,s);
}客户端-网页代码:
<?php
error_reporting(E_ALL);
$port = 2012;
$address = "127.0.0.1";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: "
.socket_strerror(socket_last_error())."<br/>";
}
$result = socket_connect($socket, $address, $port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) "
.socket_strerror(socket_last_error($socket)) ."<br/>";
}else{
echo "Connecting successful."."<br/>";
}
$msg = "ULIST";
$len = strlen($msg);
$flag=0;
socket_sendto($socket, $msg, $len, $flag, $address, $port);
//socket_close($socket);
?>发布于 2014-03-23 06:18:50
请尝试用socket_write($socket, $msg, $len );代替socket_sendto来连接套接字。
https://stackoverflow.com/questions/22580079
复制相似问题