QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 856|回复: 2

socket编程的简单问题

[复制链接]
发表于 2005-4-1 11:19:53 | 显示全部楼层 |阅读模式
我第一次写socket的程序,在和服务器建立连接后,使用recv接收数据,当没有数据可读时recv会一直在哪里等待,不知道是怎么回事,我是这样调用的啊
recv(s, buffer, 255, 0),应该没有错吧,



为说明问题,附上源码


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

#define PORT 21
#define SERVER_IP "61.129.102.193"

int main()
{
    struct sockaddr_in addr;
    char buffer[256],command[256];
    int s,i;

    memset(buffer, 0, sizeof(buffer));
    memset(command, 0, sizeof(command));

    if ((s=socket(AF_INET, SOCK_STREAM, 0)) < 0)  //建立一个socket
    {
        printf("failed to create socket!\n");
        exit(1);
    }

    bzero(&addr, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT);
    addr.sin_addr.s_addr = inet_addr(SERVER_IP);

    if (connect(s, (const struct sockaddr*)&addr, sizeof(addr))<0)
    {
        printf("failed to connect server!\n");
        exit(1);
    }

    memset(buffer, 0, sizeof(buffer));

    while (recv(s, buffer, 255, 0)>0)
    {
        printf("%s", buffer);
        memset(buffer, 0, sizeof(buffer));
    }

    shutdown(s, 2);

    return 0;
}
发表于 2005-4-1 16:56:19 | 显示全部楼层
while (recv(s, buffer, 255, 0)>0)
{
printf("%s", buffer);
memset(buffer, 0, sizeof(buffer));
}

这句就是判断收到包就打印啊,当然就在等了。

感觉你好象有点把服务器和客户机搞反了
回复

使用道具 举报

发表于 2005-4-1 17:19:45 | 显示全部楼层
while (recv(s, buffer, 255, 0)>0)
{
     printf("%s", buffer);
     memset(buffer, 0, sizeof(buffer));
}

把recv()里面的0改成MSG_DONTWAIT试试吧。

我有点搞不懂你既然不用标志位(flag),为什么用recv而不用read。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 09:50 , Processed in 0.039711 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表