我写了一个TCP服务器程序,在局域网上,客户端填上服务器的局域网IP和端口就可以连接,可是如果填上服务器的公网IP(上Internet时分配的)地址,为什么不能连接,代码如下:
sock = socket( AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET) {
MessageBox("socket() failed", "Error", MB_OK);
closesocket(sock);
return;
}


          local_sin->sin_family = AF_INET;
 local_sin->sin_addr.s_addr = INADDR_ANY;
 local_sin->sin_port = htons(5000);        


if (bind( sock, (struct sockaddr FAR *) &local_sin, sizeof(local_sin)) == SOCKET_ERROR)
{
MessageBox("bind(sock) failed", MB_OK);
return;
}

if (listen( sock, 5 ) < 0) {


MessageBox( "listen(sock) failed", MB_OK);
return;
}

acc_sin_len = sizeof(acc_sin);


sock = accept( sock,(struct sockaddr FAR *) &acc_sin,
(int FAR *) &acc_sin_len );
if (sock < 0) {
sprintf(szBuff, "%d is the error", WSAGetLastError());

MessageBox(szBuff, "accept(sock) failed", MB_OK);
return;
}

MessageBox("accept()", "Accepted a connection!", MB_OK);