包含SDL时,简单的tcp echo程序无法正常工作?

时间:2012-06-04 07:40:13

标签: c++ c runtime sdl winsock

我有这个奇怪的问题,每当我#include "SDL/SDL.h",我的Windows套接字程序都不会执行。它可以编译但运行时不会执行任何操作。当我删除#include "SDL/SDL.h"标题,编译并运行时,它会再次开始工作??。

我正在尝试使SDL和我的原始套接字程序都能正常工作,但我不明白这是错误的。

//#include "SDL/SDL.h"
#define _WIN32_WINNT 0x501
#include <iostream>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <string.h>
#include <ws2tcpip.h>
#define MAXLEN 80
using namespace std;

const int winsockVersion = 2;

int main( int argc, char* args[] ) { 

    WSADATA wsadata;
    if ( (WSAStartup(MAKEWORD(2,0),&wsadata)) == 0){
        cout<<"-[ WSAStartup Initialized. ]" << endl;

        char PORT[MAXLEN];
        char SERVER[MAXLEN];
        cout <<"Server: ";
        cin>>SERVER;
        cout <<"Port: ";
        cin>>PORT;

        struct addrinfo hints, *res;
        int sockfd;

        memset(&hints,0,sizeof hints);
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;

        if (getaddrinfo(SERVER,PORT,&hints,&res) != 0){
            cout<<"-Getaddrinfo unsuccessful." << endl;
        }

        if ( (sockfd = socket(res->ai_family,res->ai_socktype,res->ai_protocol)) == -1 ){
            cout<<"-Unable to create socket." << endl;
        }

        if ( (connect(sockfd,res->ai_addr,res->ai_addrlen)) != -1 ){
            cout<<"-[ Connection Established. ]" << endl;
        }

        cout<<"-[ Client connecting to: ]" << res->ai_addr << endl;

        while(true){
            string text_buff;
            cout<<"Send: ";
            getline(cin,text_buff);
            if( (send(sockfd,text_buff.c_str(),text_buff.length()+1,0)) != -1 ){
                cout<<"-----------------------------------> Data sent!." << endl;
            }

            if ( text_buff == "quit" ){
                break;
            }

        }

    }else{
        cout<<"-WSAStartup Initialization failed." << endl;
        if(WSACleanup()!=0){
            cout<<"-WSACleanup Successful." << endl;
        }else{
            cout<<"-WSACleanup Failed." << endl;
        }
    }

    return 0;
}

使用

进行编译
g++ -o draft.exe draft.cpp -I"C:\compilers and libs\Libs\SDL\SDL devep\SDL-1.2.15\include" -L"C:\compilers and libs\Libs\SDL\SDL devep\SDL-1.2.15\lib" -lmingw32 -lSDLmain -lSDL -lws2_32

1 个答案:

答案 0 :(得分:1)

据我所知,SDL用一些愚蠢的#define main技巧重写了主要功能,它就像那样拦截程序主。

因此,可能根本没有调用main。

如果我没记错,你的主要功能(参数)应该完全 int main(int argc, char *argv[])