0

服务器必须在Linux中使用C程序回显客户端发送的消息。我使用的是Ubuntu OS(我不知道这个信息是否有用!)。它第一次起作用。但第二次,它给出了“错误连接”。我尝试更改端口号。但它仍然没有奏效。请指导我。我是初学者。

服务器.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>

int main()
{
    int sd, sd1, len, confd, n;
    struct sockaddr_in ser, cli;
    char msg[50];

    if((sd = socket(AF_INET,SOCK_STREAM, 0)) < 0)
        printf("\nSocket creation error\n");

    bzero(&ser, sizeof(ser));
    ser.sin_family = cli.sin_family = PF_INET;
    ser.sin_port = htons(10000);
    ser.sin_addr.s_addr = htonl(INADDR_ANY);
    len = sizeof(ser);

    if ((bind(sd, (struct sockaddr*)&ser, len)) < 0) {
        printf("\nBind Error");
        exit(0);
    }
    if (listen(sd, 2) == 0) {
        if ((sd1 = accept(sd, (struct sockaddr*)&ser, &len)) > 0) {
            do {
                bzero(&msg, 50);
                read(sd1, msg, 50);
                //int m=(int)msg;
                printf("\nMessage from client:%s\n", msg);
                write(sd1, msg, strlen(msg));
                if(strcmp(msg, "exit") == 0)
                    break;
            } while(strcmp(msg, "exit") != 0);
        }
    }
}

*强文本*client.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>

int main()
{
    int sd, n, len;
    struct sockaddr_in ser, cli;
    char text[50];

    if ((sd = socket(AF_INET,SOCK_STREAM, 0)) < 0)
        printf("\nSocket creation error\n");

    bzero(&ser, sizeof(ser));
    ser.sin_family = cli.sin_family = PF_INET;
    ser.sin_port = htons(10000);
    ser.sin_addr.s_addr = htonl(INADDR_ANY);
    len = sizeof(ser);

    if ((connect(sd, (struct sockaddr*)&ser, len)) < 0) {
        printf("\nError connection");
        exit(0);
    }
    while(1) {
        strcpy(text, " ");
        printf("\nEnter data which is to be sent:");
        scanf("%s", text);
        write(sd, text, strlen(text));
        read(sd, text, 50);
        printf("\nEcho msg from server:%s", text);
        if (strcmp(text, "exit") == 0)
            break;
    }
    close(sd);
}
4

1 回答 1

1

您的客户真的可以连接到任何地址吗?

ser.sin_addr.s_addr=htonl(INADDR_ANY);

您很可能打算连接到特定服务器:

ser.sin_addr.s_addr=inet_addr("127.0.0.1");
于 2012-10-24T17:51:23.983 回答