QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1259|回复: 4

请问这段网络程序错误在哪里?谢谢大家。

[复制链接]
发表于 2006-7-24 09:12:19 | 显示全部楼层 |阅读模式
[code:1]
--------------------------------------------------------------------------------


代码:
#include "myproxy.h"

int
main()
{
        int sockfd;
        char ip[64];
        char port[16];
        struct sockaddr_in address;       
        char request[256];
        char response[256];
        int ret;

        /*input the ip address to test*/
            printf("Pleae input the IP address:\n");
        scanf("%s",ip);
        printf("Pleae input the port:\n");
        scanf("%s",port);       

        /*create the socket*/
         sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if(sockfd == -1)
        {
                printf("Failed in creating socket!\n");
        }

        /*connect to the server by socket*/
        address.sin_family = AF_INET;
        address.sin_addr.s_addr = inet_addr(ip);
        address.sin_port = htons(atoi(port));       
        ret = connect(sockfd, (struct sockaddr *)&address, sizeof(address));
        if(ret == -1)
        {
                printf("Failed in connecting to server!\n");
        }

        /*send the http request*/
        sprintf(request,
                "%s", "GET /index.html HTTP/1.1\r\n",
                //"%s", "Host:www.google.com\r\n",
                //"%s", "Connection:close\r\n",
                //"%s", "User-agent:Mozilla/4.0\r\n",
                "%s", "\r\n");
        ret = strlen(request);
        ret = write(sockfd, request, strlen(request));               
        if(ret == -1)
        {
                printf("Failed in writing data to socket!\n");
        }

        /*read the response from server*/
        /*here i donnot check the integrity of the data*/
        ret = 1;
        //while(ret == 1)
        {
                ret = read(sockfd, response, 256);
        }
        printf("%s", response);
       
        /*close the socket*/
        close(sockfd);
}
[/code:1]
===========================
为什么在read那里总会滞留住呢?是不是还要对socket设置些什么参数呢?
发表于 2006-7-24 14:41:58 | 显示全部楼层
是不是
while(ret!=-1)
回复

使用道具 举报

 楼主| 发表于 2006-7-24 17:38:45 | 显示全部楼层
谢谢兄弟,我把读时的那个while注释掉了,仍是卡在那个地方,应当不是这个原因。
回复

使用道具 举报

发表于 2006-7-24 22:25:35 | 显示全部楼层
卡在那也算正常,在阻塞模式下,如果没有数据,读操作会处于等待状态。
好像select可以设置模式,具体不太了解。
回复

使用道具 举报

发表于 2006-7-25 09:31:47 | 显示全部楼层
看看《UNIX网络编程》

fcntl(sockfd, F_SETFL, O_NONBLOCK);    //设置非阻塞socket

然后看select();

好多讲Linux编程的书里都有介绍
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 10:27 , Processed in 0.038177 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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