免费注册 查看新帖 |

Chinaunix

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

[网络] 关于UDP在非本机环境下通讯问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-03-28 11:06 |只看该作者 |倒序浏览
网上找到的例子都是在本机情况下,客户端和服务器之间通讯。但是,我想实现非本机下通信,于是改了自动获取ip,而是写了服务器的ip,结果就一直没反应,不知道有没有大神遇到过这种情况这是本机下udp例子服务器
#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <string.h>  
#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <netdb.h>

#define BUF_SIZE 30
#define PORT 9190
#define SERIP "223.3.84,129"

void error_handle(char *str)
{
        printf("%s", str);
};

int main()
{
        int serfd, ret;
        char msg[BUF_SIZE];
        int str_len;
        socklen_t clnt_adr_sz;
        struct sockaddr_in serv_adr, clnt_adr;
       
        serfd = socket(PF_INET, SOCK_DGRAM, 0);
        if(serfd<0){
                error_handle("socket failed!\n");
                return -1;
        }
        printf("socket succeed!\n");
       
        memset(&serv_adr, 0, sizeof(serv_adr));
        serv_adr.sin_family = AF_INET;
        serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);
//        serv_adr.sin_addr.s_addr = inet_addr(SERIP);
       
        serv_adr.sin_port = htons(PORT);
        ret = bind(serfd, (struct sockaddr *)&serv_adr, sizeof(serv_adr));
        if(ret<0){
                error_handle("bind failed!\n");
                return -1;
        }
        printf("bind succeed!\n");
       
        while(1){
                clnt_adr_sz = sizeof(clnt_adr);
                str_len = recvfrom(serfd, msg, BUF_SIZE, 0, (struct sockaddr *)&clnt_adr, &clnt_adr_sz);
                msg[str_len] = '\0';
                printf("msg from client is %s\n", msg);
                if(msg[0]=='q'&&msg[1]=='\n'){
                        printf("bye bye!!\n");
                        break;
                }
                sendto(serfd, msg, str_len, 0, (struct sockaddr *)&clnt_adr, clnt_adr_sz);
        }
        close(serfd);
       
        return 0;
}


这是本机下udp例子客户端
#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <string.h>  
#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <netdb.h>

#define BUF_SIZE 30
#define PORT 9190
//#define SERIP "223.3.84,129"
#define SERIP "127.0.0.1"

void error_handle(char *str)
{
        printf("%s", str);
};

int main()  
{  
        int clntfd, ret;
        char msg[BUF_SIZE];
        int str_len;
        socklen_t adr_sz;
        struct sockaddr_in serv_adr, from_adr;
       
        clntfd = socket(PF_INET, SOCK_DGRAM, 0);
        if(clntfd<0){
                error_handle("socket failed!\n");
                return -1;
        }
        printf("socket succeed!\n");
       
        memset(&serv_adr, 0, sizeof(serv_adr));
        serv_adr.sin_family = AF_INET;
        serv_adr.sin_addr.s_addr = inet_addr(SERIP);
        serv_adr.sin_port = htons(PORT);
       
        while(1){
                fputs("insert msg (q to quit):", stdout);
                fgets(msg, sizeof(msg), stdin);
                       
                sendto(clntfd, msg, strlen(msg), 0, (struct sockaddr *)&serv_adr, sizeof(serv_adr));
                if(!strcmp(msg, "q\n") || !strcmp(msg, "Q\n")){
                        break;
                }
                adr_sz = sizeof(from_adr);
                str_len = recvfrom(clntfd, msg, BUF_SIZE, 0, (struct sockaddr *)&from_adr, &adr_sz);
                msg[str_len] = '\0';
                printf("msg from server is %s\n", msg);
        }
       
        close(clntfd);  
        return 0;  
}  

但是把ip改成主机ip(不是本地回环),然后通讯就不成功了

论坛徽章:
0
2 [报告]
发表于 2017-03-28 17:21 |只看该作者
老兄,你再仔细看看你写的IP,你不觉得奇怪么?有个逗号在里面
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP