首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

发送UDP,Socket operation on non-socket,初学

2012-03-09 
发送UDP,Socket operation on non-socket,初学,请指教今天刚开始看TCP/IP详解:实现,第一个程序示例就出现

发送UDP,Socket operation on non-socket,初学,请指教
今天刚开始看TCP/IP详解:实现,第一个程序示例就出现了错误,望大家帮助!谢谢!

C/C++ code
#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define BUFFSIZE 150int main(void){    struct sockaddr_in serv;    char buff[BUFFSIZE];    int sockfd, n;    if((sockfd = socket(PF_INET, SOCK_DGRAM, 0) < 0))        perror("socket error");    bzero((char*)&serv, sizeof(serv));    memset(buff, 0, BUFFSIZE);    serv.sin_family = AF_INET;    serv.sin_addr.s_addr = inet_addr("140.252.1.32");    serv.sin_port = htons(13);    if(n = sendto(sockfd, buff, BUFFSIZE, 0,                (struct sockaddr *)&serv, sizeof(serv)) != BUFFSIZE)        perror("sendto error");    if((n = recvfrom(sockfd, buff, BUFFSIZE, 0,                        (struct sockaddr *)NULL, (int*)NULL)) != BUFFSIZE)        perror("recvfrom error");    printf("%s\n", buff);    exit(0);}

运行后出现:
sendto error: Socket operation on non-socket
recvfrom error: Socket operation on non-socket

[解决办法]
楼主这样修改试试:

if((sockfd = socket(PF_INET, SOCK_DGRAM, 0) < 0))
perror("socket error");

改为:
if(((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0))
perror("socket error");

=优先级小于<
因此sockfd实际上=0,因此出现 Socket operation on non-socket错误
消息根本就没发送
[解决办法]
if((sockfd = socket(PF_INET, SOCK_DGRAM, 0) < 0))

'<'号的优先级比'='号的高,因此你的sockfd的值不是0,就是1
改成
if((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0)

热点排行