读书人

Socket Connect的一个有关问题

发布时间: 2012-04-10 21:03:56 作者: rapoo

Socket Connect的一个问题

C/C++ code
#include <iostream>#include <WinSock2.h>using namespace std;#pragma comment(lib,"ws2_32.lib")int main(){    //SOCKET myServer;    char ipAddress[100] ="172.16.1.16" ;    int    iSockNumServer = 0;    struct sockaddr_in server;    int temp = 0;    //////////////////////////////////////////////////////////////////////////111111111111111    int nErr;    unsigned short ver;    WSADATA data;//这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据。它包含Winsock.dll 执行的数据。     ver = MAKEWORD( 2, 0); //这个宏创建一个被指定变量连接而成的WORD变量。返回一个WORD变量。    nErr = WSAStartup( ver, &data );//为了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化                                    // 异步套接字的启动命令。    cout << "nErr : " << nErr << endl;    //////////////////////////////////////////////////////////////////////////222222222222222    iSockNumServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    cout << "iSocketNumServer: " << iSockNumServer << endl;    memset(&server,0,sizeof(struct sockaddr_in));    server.sin_family = AF_INET;    server.sin_addr.s_addr =  inet_addr("172.16.1.16");    server.sin_port = htons(80);    //////////////////////////////////////////////////////////////////////////333333333333333    temp = connect(iSockNumServer, (struct sockaddr*)&server, sizeof(struct sockaddr_in));    cout << temp << endl;    return 0;    //connect(iSockNumServer,"172.16.1.16",strlen("172.16.1.16"));}


IP是我自己的IP 但是connect一直返回-1. 求帮助

[解决办法]
看看错误代码是什么

#include <iostream>
#include <WinSock2.h>

using namespace std;
#pragma comment(lib,"ws2_32.lib")



int main()
{
//SOCKET myServer;
char ipAddress[100] ="172.16.1.16" ;
int iSockNumServer = 0;
struct sockaddr_in server;
int temp = 0;

//////////////////////////////////////////////////////////////////////////111111111111111
int nErr;
unsigned short ver;
WSADATA data;//这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据。它包含Winsock.dll 执行的数据。
ver = MAKEWORD( 2, 0); //这个宏创建一个被指定变量连接而成的WORD变量。返回一个WORD变量。
nErr = WSAStartup( ver, &data );//为了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化
// 异步套接字的启动命令。
if ( nErr != 0 )
cout << "nErr : " << nErr <<"Error Code :"<<WSAGetLastError()<< endl;

//////////////////////////////////////////////////////////////////////////222222222222222
iSockNumServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( INVALID_SOCKET == iSockNumServer )
cout << "iSocketNumServer: " << iSockNumServer <<"Error Code :"<<WSAGetLastError()<< endl;

memset(&server,0,sizeof(struct sockaddr_in));
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("172.16.1.16");
server.sin_port = htons(80);

//////////////////////////////////////////////////////////////////////////333333333333333
temp = connect(iSockNumServer, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
if ( SOCKET_ERROR == temp )
cout << temp <<" Error Code :"<<WSAGetLastError()<< endl;

WSACleanup();
return 0;

//connect(iSockNumServer,"172.16.1.16",strlen("172.16.1.16"));
}

[解决办法]
连本机的80端口,你得确定一下本机的80端口有没有开监听啊

[解决办法]
服务器段怎么写的
[解决办法]
1,定接了正的端口和主地址,如果有分析工具,你可以查一下,端口和主是不是你要接的。
2,查服器的用是不是在行中。
3,查服器的端口。
4,如果此出在中,可能是服器的socket列不足了,要解的如下:
A:修改服器的用以理更多的requests.
B:手工入如下的相似代:
while (create_socket(“socket″, “TCP”, “RemoteHost=LDNTAS42:671″, LrsLastArg) == 10061) ;

读书人网 >VC/MFC

热点推荐