2014-02-21 73 views
-1
int acceptSocket; 
struct sockaddr_in addr, client, dest; 
char buf[256]; 
long rc, sentbytes; 
int port = 18017; 

int CreateSocket() 
{ 



    if(rc!=0) 

     { 

     printf("socket failure code: %ld\n",rc); 

     return 1; 

     } 

     else 

     { 

     printf("socket started!\n"); 

     } 

     // Socket creation for UDP 

     acceptSocket=socket(AF_INET,SOCK_DGRAM,0); 

     if(acceptSocket==-1) 

     { 

     printf("Failure: socket creation is failed, failure code\n"); 

     return 1; 

     } 

     else 

     { 

     printf("Socket started!\n"); 

     } 

    memset(&addr, 0, sizeof(addr)); 

    addr.sin_family=AF_INET; 

    addr.sin_port=htons(port); 

    addr.sin_addr.s_addr=htonl(INADDR_ANY); 

    rc=bind(acceptSocket,(struct sockaddr*)&addr,sizeof(addr)); 

    if(rc==-1) 

    { 

     printf("Failure: listen, failure code:\n"); 

     return 1; 

    } 

    else 

    { 

     printf("Socket an port %d \n",port); 

    } 




     while(rc!=-1) 
     { 
     rc=recvfrom(acceptSocket,buf, 256, 0, (struct sockaddr*) &client, sizeof(client)); 
     if(rc==0) 
     { 
      printf("Server has no connection..\n"); 
      break; 
     } 
     if(rc==-1) 
     { 
      printf("failure: recv, failure code\n"); 
      break; 
     } 
     XcpIp_RxCallback((uint16) rc, (uint8*) buf, (uint16) port); 


      makeTimer("First Timer", &firstTimerID, 2, 2); //2ms 
      makeTimer("Second Timer", &secondTimerID, 10, 10); //10ms 
      makeTimer("Third Timer", &thirdTimerID, 100, 100); //100ms 

    // buf[rc]='\0'; 
    // printf("Client sendet: %s\n",buf); 
    // sprintf(buf2,"Du mich auch %s",buf); 
    // rc=sendto(connectedSocket,buf2,strlen(buf2),0); 

     } 


     close(acceptSocket); 



     return 0; 

    } 

我为udp层创建了一个套接字,它正在等待来自客户端的连接,并且稍后将数据发送到客户端。我的程序在监听模式下崩溃。即:绑定后:我得到错误,因为c socket编程错误?

printf("Failure: listen, failure code:\n"); 

有谁能告诉我为什么? @JoachimPileborg:它不工作!再次是同样的问题。我无法在此发表评论。所有的

+1

当你得到一个错误,你可以看到* *什么错误是打印['errno']的值(http://pubs.opengroup.org/onlinepubs/9699919799/functions/errno.html)。您可以通过调用['strerror'](http://pubs.opengroup.org/onlinepubs/009695399/functions/strerror.html)从错误代码中获得可打印的字符串。请编辑您的问题以包含错误代码(和字符串)。 –

+0

UDP不会连接。 –

+0

键盘上的Enter键有问题。 –

回答

0

首先,你需要找到实际error.you可以做如下

由于绑定男子页

上的错误,则返回-1,并且errno设置为合适。

每个POSIX调用中的标准过程都有一个名为errno的整数,它包含实际错误的值。您可以手动检查它的值,或使用原语为perror或字符串错误

if (rc == -1) 
{ 
    perror("socket error"); 
} 

必须#include<errno.h>

现在绑定失败像

众多原因之一,它可能一些其它的应用程序监听此港口。您可以通过运行

netstat -a | grep "18017" 

所以,如果你发现在使用的端口,然后切换到另一个端口号,或者干脆杀死它使用端口的过程中找到它。

也请更新您while...loop以适当的格式一样,没有必要比较rc-10请如下

while(1) 
    { 
     //try to receive some data, this is a blocking call 
     if ((rc = recvfrom(acceptSocket, buf, 256, 0, (struct sockaddr *) &client, &client)) == -1) // read datagram from server socket 
     { 
      break; 
     } 
     //rest of your code 
    } 
+0

我有一个端口号问题。 – user3252048

+0

如果我收到来自客户端的请求,则接收者失败。为什么这样 ?? – user3252048

+0

@ user3252048请看看更新后的帖子。 –