+ -
当前位置:首页 → 问答吧 → 帮帮新手

帮帮新手

时间:2011-08-03

来源:互联网

暑假没什么事做就在自学unix高级编程,今天看到upd这一块,看到书后 的练习,所以就做了下!但是结果貌似没反应
 功能描述:就是利用udp实现通信!
  遇到的问题,怎么老是发送失败,就是sendto这个函数,的返回值一直小于0
代码贴上:
C/C++ code
#include <iostream>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <cstring>
#include <stdlib.h>
#include <strings.h>

using namespace std;

void* pthread1(void *param)
{
    int sk = *( (int*)param );

    struct sockaddr_in caddr;
    bzero(&caddr,sizeof(caddr));

    size_t len = sizeof(caddr);

    char msg[1024] = {'\0'};
    while(1)
    {
    recvfrom(sk,msg,1024,0,(struct sockaddr*)&caddr,&len);

    if( strcmp(msg,"quit") == 0 )
    {
        break;
    }
    }

    pthread_detach(pthread_self());
}

using namespace std;

int main(int argc,char *argv[])
{
    int sk = socket(AF_INET,SOCK_DGRAM,0);
    if(sk == -1)
    {
    cout<<"create socket fialied..."<<endl;
    return 0;
    }
    struct sockaddr_in saddr;
    bzero(&saddr,sizeof(saddr));

    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(4040);
    saddr.sin_addr.s_addr = htonl(INADDR_ANY);

    if( bind(sk,(struct sockaddr*)&saddr,sizeof(saddr))<0 )
    {
    cout<<"bind failed..."<<endl;
    close(sk);
    }
    struct sockaddr_in caddr;
    bzero(&caddr,sizeof(caddr));

    caddr.sin_family = AF_INET;
    caddr.sin_port = htons( atoi(argv[1]) );
    caddr.sin_addr.s_addr = inet_addr(argv[2]);

    pthread_t pt;
    pthread_create(&pt,NULL,pthread1,(void*)&sk);

    char msg[1024] = {'\0'};

    while(1)
    {
    cin.getline(msg,1024);

    if(sendto(sk,msg,strlen(msg)+1,0,(struct sockaddr*)&caddr,sizeof(caddr))<0)
    {
        cout<<"send failed"<<endl;
    }

    if( strcmp(msg,"quit") == 0 )
    {
        break;
    }
    }


    close(sk);
    return 0;
}


ps:小菜在这里谢谢大家了!最好指出其他错误

作者: houzhenghui123   发布时间: 2011-08-03

检查了下拼写没什么错误

另外忘了说了!编译的时候我把saddr.sin_port = htons(4040);
这句改下,第一次4040,第二次4041,并且端口都开了
运行时候:
第一个终端:./4040 192.168.139 4041
第二个终端: ./4041 192.168.139 4040
谢谢各位好心人了

作者: houzhenghui123   发布时间: 2011-08-03

ip写掉了,应该是
第一个终端:./4040 192.168.139.3 4041
第二个终端: ./4041 192.168.139.3 4040

作者: houzhenghui123   发布时间: 2011-08-03

帮顶!

作者: jsjygm   发布时间: 2011-08-03

引用 2 楼 houzhenghui123 的回复:
ip写掉了,应该是
第一个终端:./4040 192.168.139.3 4041
第二个终端: ./4041 192.168.139.3 4040

谢谢

作者: houzhenghui123   发布时间: 2011-08-03