C/S模式应用
/
// Server
SOCKET m_socket;
sockaddr_in m_sockaddr;
if (NULL == m_socket)
{
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (!m_socket)
{
ASSERT(m_socket);
return ;
}
}
int error;
m_sockaddr.sin_family = AF_INET;
m_sockaddr.sin_port = htons(2555);
m_sockaddr.sin_addr.S_un.S_addr = INADDR_ANY;
int nRes = bind(m_socket, (const struct sockaddr*)&m_sockaddr, sizeof(m_sockaddr));
if(nRes == SOCKET_ERROR){
TRACE("Bind Error: %d /n", (error = WSAGetLastError()));
return ;
}
if (SOCKET_ERROR == listen(m_socket, 2))
{
TRACE("Listen Error: %d /n", (error = WSAGetLastError()));
return ;
}
//
// 等待 listen 的监听,对方必须用 connect连接
SOCKET s = accept(m_socket, NULL, NULL);
if(s == SOCKET_ERROR){
TRACE("Accept Error: %d /n", (error = WSAGetLastError()));
return ;
}
// 等待 send 接收
char buff[256];
nRes = recv(s, buff, 256, 0);
if(nRes == 0 || nRes == SOCKET_ERROR ){
TRACE("Recv data error: %d/n", WSAGetLastError());
return ;
}
buff[255] = '/0';
AfxMessageBox(CString(buff));
char* pbuff = "hello, my boy, i'm server!";
nRes = send(s, pbuff, 256, 0);
if(nRes == 0 || nRes == SOCKET_ERROR ){
TRACE("send error: %d/n", WSAGetLastError());
return ;
}
/
// Client
SOCKET m_socket;
sockaddr_in m_sockAddr;
if (NULL == m_socket)
{
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if (!m_socket)
{
ASSERT(m_socket);
return ;
}
}
m_sockAddr.sin_family = AF_INET;
m_sockAddr.sin_port = htons(2555);
m_sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int ret = 0;
int error= 0;
ret = connect(m_socket, (const struct sockaddr*)&m_sockAddr, sizeof(m_sockAddr));
if(ret == SOCKET_ERROR){
TRACE("Connect Error: %d /n", (error = WSAGetLastError()));
if(error == 10061)
AfxMessageBox(_T("请确认服务器确实已经打开并工作在同样的端口!"));
return ;
}
char *pbuff = "hello, my gril, i'm client!";
ret = send(m_socket, pbuff, 256, 0);
char prbuff[256];
ret = recv(m_socket, prbuff, 256, 0);
if(ret == 0){
TRACE("Recv data error: %d/n", WSAGetLastError());
return ;
}
prbuff[255] = '/0';
AfxMessageBox(CString(prbuff));