帮帮新手
时间:2011-08-03
来源:互联网
暑假没什么事做就在自学unix高级编程,今天看到upd这一块,看到书后 的练习,所以就做了下!但是结果貌似没反应
功能描述:就是利用udp实现通信!
遇到的问题,怎么老是发送失败,就是sendto这个函数,的返回值一直小于0
代码贴上:
C/C++ code
ps:小菜在这里谢谢大家了!最好指出其他错误
功能描述:就是利用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
谢谢各位好心人了

另外忘了说了!编译的时候我把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
第一个终端:./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
ip写掉了,应该是
第一个终端:./4040 192.168.139.3 4041
第二个终端: ./4041 192.168.139.3 4040
谢谢
作者: houzhenghui123 发布时间: 2011-08-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28