帮帮新手

houzhenghui123 2011-08-03 07:44:14
暑假没什么事做就在自学unix高级编程,今天看到upd这一块,看到书后 的练习,所以就做了下!但是结果貌似没反应
功能描述:就是利用udp实现通信!
遇到的问题,怎么老是发送失败,就是sendto这个函数,的返回值一直小于0
代码贴上:
#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:小菜在这里谢谢大家了!最好指出其他错误
...全文
54 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
houzhenghui123 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jsjygm 的回复:]
帮顶!
[/Quote]
谢谢!
houzhenghui123 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 houzhenghui123 的回复:]
ip写掉了,应该是
第一个终端:./4040 192.168.139.3 4041
第二个终端: ./4041 192.168.139.3 4040
[/Quote]
谢谢
jsjygm 2011-08-03
  • 打赏
  • 举报
回复
帮顶!
houzhenghui123 2011-08-03
  • 打赏
  • 举报
回复
ip写掉了,应该是
第一个终端:./4040 192.168.139.3 4041
第二个终端: ./4041 192.168.139.3 4040
houzhenghui123 2011-08-03
  • 打赏
  • 举报
回复
检查了下拼写没什么错误

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

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧