Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Connect()返回负值? #包括 #包括 #包括 #包括 #包括 #包括 #定义MY_端口8989//定义套接字的端口 #定义MAXBUF 256 int main(int argc,char*argv[]) { //char-str[MAXBUF]; INTA; WSADATA wsa; SOCKET sockfd,clientfd;//SOCKET是一种数据类型。我们在这里初始化数据类型SOCKET的两个变量 struct sockaddr_in self;//套接字的系列、端口和IP地址的结构(套接字描述符) char buffer[MAXBUF];//这是一个字符数组,将从客户端接收消息,我们将使用它来操作 //字符消息[MAXBUF]; printf(“\n初始化Winsock…”); 如果(WSAStartup(MAKEWORD(2,2),&wsa)!=0)//WSASTARUP用于告诉windows准备好连接,如果它返回值0,则表示windows已准备好 { printf(“失败。错误代码:%d”,WSAGetLastError()); 返回1; } printf(“已初始化。\n”); /*---创建流式套接字---*/ 如果((sockfd=socket(AF_INET,SOCK_STREAM,0))_C_Sockets_Client_Client Server - Fatal编程技术网

为什么Connect()返回负值? #包括 #包括 #包括 #包括 #包括 #包括 #定义MY_端口8989//定义套接字的端口 #定义MAXBUF 256 int main(int argc,char*argv[]) { //char-str[MAXBUF]; INTA; WSADATA wsa; SOCKET sockfd,clientfd;//SOCKET是一种数据类型。我们在这里初始化数据类型SOCKET的两个变量 struct sockaddr_in self;//套接字的系列、端口和IP地址的结构(套接字描述符) char buffer[MAXBUF];//这是一个字符数组,将从客户端接收消息,我们将使用它来操作 //字符消息[MAXBUF]; printf(“\n初始化Winsock…”); 如果(WSAStartup(MAKEWORD(2,2),&wsa)!=0)//WSASTARUP用于告诉windows准备好连接,如果它返回值0,则表示windows已准备好 { printf(“失败。错误代码:%d”,WSAGetLastError()); 返回1; } printf(“已初始化。\n”); /*---创建流式套接字---*/ 如果((sockfd=socket(AF_INET,SOCK_STREAM,0))

为什么Connect()返回负值? #包括 #包括 #包括 #包括 #包括 #包括 #定义MY_端口8989//定义套接字的端口 #定义MAXBUF 256 int main(int argc,char*argv[]) { //char-str[MAXBUF]; INTA; WSADATA wsa; SOCKET sockfd,clientfd;//SOCKET是一种数据类型。我们在这里初始化数据类型SOCKET的两个变量 struct sockaddr_in self;//套接字的系列、端口和IP地址的结构(套接字描述符) char buffer[MAXBUF];//这是一个字符数组,将从客户端接收消息,我们将使用它来操作 //字符消息[MAXBUF]; printf(“\n初始化Winsock…”); 如果(WSAStartup(MAKEWORD(2,2),&wsa)!=0)//WSASTARUP用于告诉windows准备好连接,如果它返回值0,则表示windows已准备好 { printf(“失败。错误代码:%d”,WSAGetLastError()); 返回1; } printf(“已初始化。\n”); /*---创建流式套接字---*/ 如果((sockfd=socket(AF_INET,SOCK_STREAM,0)),c,sockets,client,client-server,C,Sockets,Client,Client Server,在这段代码中,您设置了self的所有值,然后用memset清除self。我很确定这毫无意义,很可能是您看到的错误的原因,即没有为connect提供有用的参数 即使没有这种错误的memset代码也没有多大意义:您试图连接到INADDR____________________________但是没有这样的IP地址可连接。INADDR__________________要使用的ave,如本地主机的127.0.0.1。From:“如果没有发生错误,connect返回零。否则,它返回SOCKET\u er

在这段代码中,您设置了
self
的所有值,然后用
memset
清除
self
。我很确定这毫无意义,很可能是您看到的错误的原因,即没有为
connect
提供有用的参数


即使没有这种错误的
memset
代码也没有多大意义:您试图连接到
INADDR____________________________
但是没有这样的IP地址可连接。
INADDR__________________要使用的ave,如本地主机的
127.0.0.1

From:“如果没有发生错误,connect返回零。否则,它返回SOCKET\u error,可以通过调用WSAGetLastError检索特定的错误代码。”。因此,请帮自己一个忙,检查错误的详细信息。这已经导致对问题的解释,或者您至少应该在问题中包含这些错误详细信息。函数返回“否定”错误上的值,如文档所示。在相应结构中设置值之前,将调用移动到
memset
。也请花时间缩进代码…通过使用WSAGetLastError,它给了我错误代码10049,而且我已经移动了memset。不,不是它,我移动了它仍然给了我相同的错误。我认为这与此有关有地址,但我完全sure@user66581:我很确定这至少是问题的一部分,但可能还有更多问题。正如我在评论中所说的:使用WSAGetLastError获取详细错误,以获取有关连接失败原因的更多信息。是的,我这样做了,它给了我一个错误代码10049,我觉得它有som与…有关address@user66581:我刚刚看到您的代码有更多问题,请参阅更新的答案。
#include<io.h>
#include<stdio.h>
#include<winsock2.h>
#include <ctype.h>
#include<string.h>
#include<strings.h>

#define MY_PORT     8989 //defining the port for the socket
#define MAXBUF      256



int main(int argc , char *argv[])
{
    //char str[MAXBUF];
    int a;
    WSADATA wsa;

    SOCKET sockfd , clientfd; //SOCKET is a data type. We initialize two variables of the data type Socket here
    struct sockaddr_in self; //structure for the family,port and IP address of the socket (Socket descriptors)
    char buffer[MAXBUF]; // this is a character array that will receive the message from the client and we will use this to manipulate
    //char message[MAXBUF];
    printf("\nInitialising Winsock...");


    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) //WSASTARUP is used to tell windows to get ready for a connection and if it returns a value 0, windows is ready
    {
        printf("Failed. Error Code : %d",WSAGetLastError());
        return 1;
    }


    printf("Initialised.\n");

    /*---create streaming socket---*/
    if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) //socket is created using a function called socket
                                                        //using AF_INET means that we are using TCP/IP family
                                                          //the if statement here checks whether or not the value returned by the socket is negative or not. If it is negative that means there is some sort of an error
    {
        perror("Socket");
        exit(errno);
    }
        printf("Socket created.\n");
        self.sin_family = AF_INET;
        self.sin_port = htons(MY_PORT);
        self.sin_addr.s_addr = htonl(INADDR_ANY);
        memset(&self,'\0', sizeof(self));
    /*The connect function below is used to establish a connection between the client and the server*/
    if (connect(sockfd, (struct sockaddr*)&self, sizeof(self)) <0)
        {
        printf("connection with the server failed...\n");
        exit(0);
        }
        else
        printf("connected to the server..\n");

        printf("Please enter message: ");
        memset(buffer, 0, sizeof (buffer));
        fgets(buffer, MAXBUF, stdin); //fgets is used here to get whatever is inside the buffer
        while (1)
        {
        /*struct sockaddr_in client_addr;
        int addrlen=sizeof(client_addr);*/

        /*---accept a connection (creating a data pipe)---*/

        a=  write(sockfd, buffer, sizeof(buffer));
        if(a<0){
        printf("Error");
            }
        // a= recv(clientfd, buffer, MAXBUF, 0);
        //accept(clientfd, (struct sockaddr*)&client_addr, &addrlen);

        a= read(sockfd, buffer, sizeof(buffer));
        if(a<0){
        printf("Error");
      }
        if (strncmp("QUIT", buffer, 4) == 0) {
            printf("Server Exit...\n");
            break;

        }
        }

    close(sockfd); //close the sockfd
    WSACleanup(); // windows socket is cleaned up
    return 0;
}


    self.sin_family = AF_INET;
    self.sin_port = htons(MY_PORT);
    self.sin_addr.s_addr = htonl(INADDR_ANY);

    memset(&self,'\0', sizeof(self));