|
代码如下:
这个是Linux下写的服务器端程序:
int main (int argc, char *argv[])
{
int i;
for (i = 0; i < MAX_COUNT; i++)
a_sock = -1;
l_sock = socket (AF_INET, SOCK_STREAM, 0);
sock_addr.sin_family = AF_INET;
sock_addr.sin_port = htons (L_PORT);
sock_addr.sin_addr.s_addr = htonl (INADDR_ANY);
if (bind (l_sock, (struct sockaddr *)&sock_addr, sizeof (sock_addr)) < 0)
{
close (l_sock);
printf ("can not bind!\n");
return 0;
}
if (listen (l_sock, 5) != 0)
{
close (l_sock);
printf ("can not listen!\n");
return 0;
}
while (1)
{
int sock_count = getcount ();
int sock_len = sizeof (sock_addr);
if ((a_sock[sock_count] = accept (l_sock, (struct sockaddr *)&sock_addr, &sock_len)) < 0)
{
close (l_sock);
printf ("can not accept!\n");
return 0;
}
printf ("accept success!\n");
if ((fork ()) == 0)
{
int pid = getpid ();
close (l_sock);
}
}
return 0;
}
程序编译和运行都正常的,在监听状态
这个是windows下的客户端程序:(其他没关联部分我都省略了)
m_cSock = socket (AF_INET, SOCK_STREAM, 0);
m_cAddr.sin_addr.S_un.S_addr = htonl (inet_addr (s_IP));
m_cAddr.sin_family = AF_INET;
m_cAddr.sin_port = htons (atoi (s_Port));
if (connect (m_cSock, (sockaddr *)&m_cAddr, sizeof (m_cAddr)))
{
AfxMessageBox ("can not connect");
return;
}
SetWindowText ("已经连接上");
但是windows的connect一直连不上linux
我后来分别写了linux的客户端和windos的服务器端进行测试,结果同样操作系统下面都是能连接成功的
但是如果是windows与linux连接就不行,这是为什么?
代码哪部分存在问题吗?
防火墙我已经关闭了的。
而且,反过来,以Linux作为客户端,Windows作为服务器端又是能够连接成功的
都已经搞不清楚怎么会这样了
我在后面加了GetLastError显示错误信息,但是明明没有连接成功,竟然也提示我"操作成功"(因为服务器始终处于监听状态)
DWORD nErrorNo = GetLastError ( ); // 得到错误代码
LPSTR lpBuffer;
FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
nErrorNo, // 此乃错误代码,通常在程序中可由 GetLastError()得之
LANG_NEUTRAL,
(LPTSTR) & lpBuffer,
0 ,
NULL);
CString strErrorCause = lpBuffer ? _T(lpBuffer) : _T(" Sorry, cannot find this error info.");
AfxMessageBox (lpBuffer);
UpdateData (FALSE);
// Free the buffer.
LocalFree (lpBuffer);
这是显示错误信息的代码 |
|