免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3417 | 回复: 7
打印 上一主题 下一主题

[C++] linux C++ UDP 网络编程,问题求救。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-21 11:47 |只看该作者 |倒序浏览
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
//#include<signal.h>

//#include<string>
//#include<sstream>
#include<iostream>
using namespace std;

int main(int argc, char* argv[])
{       
        //create the sock
        int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        if(-1 == sockfd){
                cerr<<"creat sock error..."<<endl;
                exit(1);
        }
       
        //bind the address
        struct sockaddr_in server;
        server.sin_family = AF_INET;
        server.sin_port = htons(7000);
        server.sin_addr.s_addr = htonl(INADDR_ANY);
        if(-1 == bind(sockfd, (struct sockaddr*)&server, sizeof(struct sockaddr_in))){
                cerr<<"bind sock error..."<<endl;
                exit(1);
        }
       
        //start service
        struct sockaddr_in client;
        int len = sizeof(struct sockaddr_in);
        while(true){
                char c;

                if(-1 == recvfrom(sockfd, &c, 1, 0, (struct sockaddr*)&client, &len)){
                        cerr<<"server : recv data error..."<<endl;
                        continue;
                }

                cout<<"server : before read "<<endl;
                read(sockfd,&c, 1);
                cout<<"get from client : "<<c<<endl;
                c = toupper(c);
                if(-1 == sendto(sockfd, &c, 1, 0, (struct sockaddr*)&client, len)){
                        cerr<<"server : send data error..."<<endl;
                        continue;
                }
        }
#if 0
        [dayangxi@localhost dayangxi]$ g++ -o serverUDP serverUDP.cpp
        serverUDP.cpp: In function `int main(int, char**)':
        serverUDP.cpp:38: invalid conversion from `int*' to `socklen_t*'
#endif       
}

论坛徽章:
0
2 [报告]
发表于 2007-12-21 11:49 |只看该作者
而统一的代码,我编译成C代码就没有问题,当然cerr用printf代替,
问题出在这个函数:
recvfrom(sockfd, &c, 1, 0, (struct sockaddr*)&client, &len)

那为大虾知道啊

论坛徽章:
0
3 [报告]
发表于 2007-12-21 11:59 |只看该作者
c编译不严格,c++编译严格

论坛徽章:
0
4 [报告]
发表于 2007-12-21 12:08 |只看该作者
socklen_t len;

论坛徽章:
0
5 [报告]
发表于 2007-12-21 15:22 |只看该作者

回复 #4 beilian 的帖子

恩 编译通过了 但好像受不到数据,问题也是那个函数,而我用TCP的连接方式收发都没有问题,现在是改后的代码:
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
//#include<signal.h>

//#include<string>
//#include<sstream>
#include<iostream>
using namespace std;

int main(int argc, char* argv[])
{       
        //create the sock
        int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        if(-1 == sockfd){
                cerr<<"creat sock error..."<<endl;
                exit(1);
        }
       
        //bind the address
        struct sockaddr_in server;
        server.sin_family = AF_INET;
        server.sin_port = htons(7000);
        server.sin_addr.s_addr = htonl(INADDR_ANY);
        if(-1 == bind(sockfd, (struct sockaddr*)&server, sizeof(struct sockaddr_in))){
                cerr<<"bind sock error..."<<endl;
                exit(1);
        }
       
        //start service
        struct sockaddr_in client;
        socklen_t len;
        while(true){
                char c;
                cout<<"server before read :"<<endl;
                if(-1 == recvfrom(sockfd, &c, 1, 0, (struct sockaddr*)&client, &len)){
                        cerr<<"server : recv data error..."<<endl;
                        continue;
                }
                cout<<"server : get from client : "<<c<<endl;
                c = toupper(c);
                if(-1 == sendto(sockfd, &c, 1, 0, (struct sockaddr*)&client, len)){
                        cerr<<"server : send data error..."<<endl;
                        continue;
                }
        }
        return 0;
}

论坛徽章:
0
6 [报告]
发表于 2007-12-21 16:19 |只看该作者
初始化 len = sizeof(struct sockaddr_in);
别的地方没仔细看

论坛徽章:
0
7 [报告]
发表于 2007-12-21 21:26 |只看该作者
用tcpdump看看是不是真的有数据过来

论坛徽章:
0
8 [报告]
发表于 2007-12-27 16:58 |只看该作者

你这个是入门级程序么。

教你个方法,在网上找个教程, 然后对照改改就知道了。
代码都差不多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP