【问题标题】:Send a string from client to server从客户端向服务器发送字符串
【发布时间】:2013-01-13 18:51:28
【问题描述】:

这是我写的:

客户:

printf("\nType a string: (STOP to ending connection)\n\n");
do{
    while ((c = getchar ()) != '\n' && i < MAXLENGHT){
    buf[i++] = c;
}
buf[i] = '\0';
len = strlen(buf);
}
while( strcmp(buf,"STOP")!=0);
close(sockfd);
exit(0);
}

服务器:

int main (int argc, char **argv) {
int sock, fd;
socklen_t client_len;
struct sockaddr_in server, client;


if ((sock = socket (AF_INET, SOCK_STREAM, 0)) == -1) {
    perror ("Socket failed");
    exit (1);
}

server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons (SERVER_PORT);


if (bind ( sock, (struct sockaddr *) &server, sizeof server) == -1) {
    perror ("bind failed");
    exit (2);
}

listen (sock,1);


    while (1) {
    client_len = sizeof (client);
    if ((fd = accept ( sock, (struct sockaddr *) &client, &client_len)) < 0) {
        perror ("accepting connection");
        exit(3);
    }
    fprintf (stderr, "\nOpen.\n");
    send (fd, "\nWelcome!\n", 50, 0);
    check_stats (fd, fd);}

    close(fd);
    fprintf (stderr, "\nClose\n");
    exit (0);


 }  

.

void check_stats(int in, int out)

是一个函数,服务器接收字符串,做一些事情,然后将它发送回客户端。 我的问题是: 在服务器的代码中,我必须放在前面

close(fd)

当用户键入“STOP”时,服务器结束,但在结束之前,它向客户端发送另一个 BYE 字符串?我遇到了问题

recv(int sockfd, void *buf, size_t len, int flags);

功能。我必须把主要内容作为

int sockfd

?

【问题讨论】:

  • 刚刚为我的问题添加了一些细节。如果用户键入 STOP,则服务器向客户端发送 BYE 并结束。很明显,客户端读取了这条消息,然后关闭了连接
  • @WhozCraig,可怕的缩进误导了你。这是一个do {} while() 循环。
  • 你的意思是你不知道如何从 TCP 套接字中读取数据?从这里开始beej.us/guide/bgnet
  • @ugoren 是的,对不起,我的缩进,这是我第一次使用 stackoverflow。
  • @Nikolai N Fetissov 我知道如何阅读,我的 check_stats 函数工作正常

标签: c sockets client-server


【解决方案1】:

sockfd 指的是您用来与服务器通信的套接字。 http://linux.die.net/man/2/recv

这里是函数原型:ssize_t recv(int sockfd, void *buf, size_t len, int flags);

如果你想一想,你会发现,如果你不提供你正在使用的套接字的函数,那么它怎么会知道从哪里获取数据?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 2014-03-10
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2017-01-12
    • 2020-08-08
    相关资源
    最近更新 更多