c套接字 - 无法连接到服务器

时间:2015-06-19 14:22:08

标签: c sockets argv

我试图向服务器发送一个字符串,服务器会将该字符串发回给我。

问题是没有连接(函数连接返回SOCKET_ERROR

输入argv很好

  

argv [1] =“54.152.161.133”(服务器IP)
     argv [2] =“6713”(港口)
     argv [3] = string

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<winsock2.h>
#include<windows.h>
#include<string.h>

//#define DEST_IP   "54.152.161.133"
//#define DEST_PORT 6713
// SOCKET WSAAPI socket(int af, int type, int protocol);
//int connect(SOCKET s, const struct sockaddr* addr, int numBytes);
//int send(SOCKET s, const char* buf,int len,int flags);
//int recv(SOCKET s, char* buf, int len, int flags);
//int closesocket(SOCKET s);
//int WSACleanup();
int main(int argc, char** argv)
{
    int cResult, flag = 0, len,s;
    char str2[10];
    WSADATA info;
    struct sockaddr_in clientService;
    unsigned short a = (unsigned short)strtoul(argv[2], NULL, 0);//convert from char* to short
    //config sockets
    int err;
    err = WSAStartup(MAKEWORD(2, 0), &info);
    if (err != 0)
    {
        printf("WSAStartup faild with error: %d\n", err);
        flag = 1;
    }
    //make empty socket
    if (flag == 0)
    {
        s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (s == INVALID_SOCKET)//Constant used for errors in socket()
        {
            //WSAGetLastError() get error code
            printf("Error creating socket = %d\n", WSAGetLastError());
        }
        else
        {
            printf("Socket function succeeded\n");
            /*close socket code*/
            cResult = closesocket(s);
            if (cResult == SOCKET_ERROR)
            {
                printf("Closesocket function faild with error %ld\n", WSAGetLastError());

            }
        }
        //config the socket
        sockaddr_in clientService;
        clientService.sin_family = AF_INET;
        clientService.sin_addr.s_addr = inet_addr(argv[1]);
        clientService.sin_port = htons(a);
        //ask for connection
        cResult = connect(s, (struct sockaddr *) &clientService, sizeof(clientService));
        if (cResult == SOCKET_ERROR)
        {
            printf("Connect function failed with error: %ld\n", WSAGetLastError());
            cResult = closesocket(s);
            if (cResult == SOCKET_ERROR)
            {
                printf("Closesocket function faild with error %ld\n", WSAGetLastError());
            }
            /*Erase WSADATA code*/
            WSACleanup();
            flag = 1;
        }
        if (flag = 0)
        {
            //send info throw socket
            len = strlen(argv[3]);
            cResult = send(s, *(argv + 3), len + 1, 0);
            if (cResult == SOCKET_ERROR)
            {
                printf("Sending data to the server has failed\n");
                /* Close socket code*/
                cResult = closesocket(s);
                if (cResult == SOCKET_ERROR)
                {
                    printf("Closesocket function faild with error %ld\n", WSAGetLastError());
                }
                /*Erase WSADATA code (we will see later) */
                WSACleanup();
                flag = 1;
            }
            if (flag == 0)
            {
                //gets data from socket
                cResult = recv(s, str2, len + 1, 0);
                if (cResult == SOCKET_ERROR)
                {
                    printf("Recving data from the server has failed\n");
                    /* Close socket code*/
                    cResult = closesocket(s);
                    printf("Closesocket function faild with error %ld\n", WSAGetLastError());
                    /*Erase WSADATA code (we will see later) */
                    WSACleanup();
                    flag = 1;
                }
                else if (cResult == 0)
                {
                    printf("The server closed the connection\n");
                    flag = 1;
                }
                if (flag == 0)
                {
                    printf(" string that sent to the server:%s\nstring that recv from the server:%s", argv[3], str2);
                    if (strcmp(argv[3], str2) == 0)
                    {
                        printf("The string that sent to the server\nand the string that recv from the server are the same\n");

                    }
                    else
                    {
                        printf("The string that sent to the server\nand the string that recv from the server are not the same\n");
                    }
                    cResult = closesocket(s);
                    if (cResult == SOCKET_ERROR)
                    {
                        printf("Closesocket function faild with error %ld\n", WSAGetLastError());
                    }
                    WSACleanup();

                }
            }


        }
    }
    system("PAUSE");
    return (0);
}

2 个答案:

答案 0 :(得分:2)

按顺序,您创建了套接字:

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

然后你关闭了它:

/*close socket code*/
cResult = closesocket(s);

在您尝试将其连接到某些内容之后:

cResult = connect(s, (struct sockaddr *) &clientService, sizeof(clientService));

关闭套接字后,请将其视为已删除。您只能在程序的最后才关闭它。

顺便说一下,你应该考虑更换这一行:

if (flag = 0)

通过这个:

if (flag == 0)

如果您只是想查看旗帜的价值。

答案 1 :(得分:1)

您的套接字在 <detaileddescription> <para>Some text</para> <para> <bold>Title</bold> </para> <para>Intro text: <itemizedlist> <listitem> <para>Text</para> </listitem> <listitem> <para>Text</para> </listitem> </itemizedlist> </para> </detaileddescription> 来电时已关闭。