免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2044 | 回复: 13
打印 上一主题 下一主题

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-14 16:25 |只看该作者 |倒序浏览
错误信息:
Program received signal SIGPIPE, Broken pipe.

程序开始一直运行,一传过来socket就中断,出现上边的错误,为什么呀?帮帮忙。
现在做的东西是windows的客户端用vb做的传送socket的程序,linux做的是接受socket并返回信息。
服务器端代码如下:
/*
* test
*/
#include <stdio.h>;
#include <stdlib.h>;
#include <unistd.h>;
#include <error.h>;
#include <string.h>;
#include <sys/types.h>;
#include <sys/socket.h>;
#include <netinet/in.h>;
const int port = 6789;
int main (int argc,char **argv)
{
        int socket_descriptor,bind_socket,listen_socket;
        struct sockaddr_in address;
        struct sockaddr_in adr_clnt;
        const int backnum=100;
        int len_inet;
        int c;//client socket
        int z;
        int n;

        socket_descriptor = socket(AF_INET, SOCK_STREAM, 0);
        if (socket_descriptor == -1)
        {
                printf("Opening socket";
        }
        memset(&address, 0, sizeof(address));
        address.sin_family = AF_INET;
        address.sin_addr.s_addr =  htonl(INADDR_ANY);
        address.sin_port = htons(port);
        bind_socket = bind(socket_descriptor,(struct sockaddr *)&address,sizeof(address));
        if (bind_socket == -1){
                printf("bind error!";
        }

        listen_socket = listen(socket_descriptor,backnum);
        if(listen_socket==-1){
                printf("listen error!";
        }else{
                printf("listening";
        }
        for(;{
                /*
                 *Waiting for a connection
                 */
                len_inet = sizeof adr_clnt ;
                printf("client accept success!";
                c=accept(socket_descriptor,(struct sockaddr *)&adr_clnt,&len_inet);
                if (c==-1){
                        printf("client accept error!";
                }else{
                        printf("client accept success!";
                }
                /*
                 *Write result back to client
                 */
                z = sendto(socket_descriptor, "test from broadcast", sizeof("test from broadcast", 0,
                (struct sockaddr *)&adr_clnt, sizeof(adr_clnt));
                if (z==-1){
                        printf("write error!";       
                }else{
                        printf("success!!!!");
                }
                close(c);
                printf("success!!!!");
        }
        printf("success!!!!");
        return 0;
}
谢谢大家,帮帮忙!

论坛徽章:
0
2 [报告]
发表于 2005-06-14 16:41 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

sendto () 是面向非连接的函数
你换成 write() 看看

论坛徽章:
0
3 [报告]
发表于 2005-06-14 16:50 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

楼上说的有道理,sendto/recvfrom是面向非连接(UDP)的函数。
也可以换成send试试。

论坛徽章:
0
4 [报告]
发表于 2005-06-14 16:51 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

time(&td);
                n=(int)strftime(dtbuf,sizeof dtbuf,"%A %b %d %H: %M: %S %Y\n",localtime(&td));
                /*
                 *Write result back to client
                 */
//                z = sendto(socket_descriptor, "test from broadcast", sizeof("test from broadcast", 0,
//                (struct sockaddr *)&address, sizeof(address)) < 0);

                z = write(c,dtbuf,n);

论坛徽章:
0
5 [报告]
发表于 2005-06-14 17:11 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

什么提示?

论坛徽章:
0
6 [报告]
发表于 2005-06-14 17:17 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

accept 会返回一个新的描述字, 你用返回的那个描述字读写试试

论坛徽章:
0
7 [报告]
发表于 2005-06-14 17:18 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

window端提示,进入disconnect 函数。报错。

论坛徽章:
0
8 [报告]
发表于 2005-06-14 17:19 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

linux端不中断

论坛徽章:
0
9 [报告]
发表于 2005-06-14 17:20 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

z = write(c,dtbuf,n);
这个中的c就是accept返回的。

论坛徽章:
0
10 [报告]
发表于 2005-06-14 17:31 |只看该作者

套接口程序出错,帮帮忙,看看哪不对?我是刚开始做的。

你的windows 端用的什么读取的
套接口定义的是什么样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP