ubuntu10.10下的upd通信(server,client)

两个udp,一个在端口5555绑定守候,一个在5556绑定守候。

udpserver.c


#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <fcntl.h>
#include <ctype.h>
#include <termios.h>
#include <sys/mman.h>
 
int main()
{
    int mysock,len;
    struct sockaddr_in server,client,peer;
    char msg[256];
    int server_len,client_len;

    if((mysock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket");
        return -1;
    }
    else {
        printf("socket created,ID:%d\n",mysock);
    }
    server_len = sizeof(struct sockaddr_in);
    bzero(&server, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(5555);
    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    //addr.sin_addr.s_addr = INADDR_ANY;

    client_len = sizeof(struct sockaddr_in);
    bzero(&client, sizeof(client));
    client.sin_family = AF_INET;
    client.sin_port = htons(5556);
    client.sin_addr.s_addr = inet_addr("127.0.0.1");

    if(bind(mysock, (struct sockaddr*)&server, sizeof(server)) < 0)
    {
        perror("bind");
        return -1;
    }
    else {
        //非阻塞
        if (fcntl(mysock,F_SETFL,fcntl(mysock,F_GETFD,0)|O_NONBLOCK) != -1) {
            printf("fcntl success.\n");
        }
        else{
            printf("fcntl fail.\n");
        }
        printf("bind ok.\n");
    }

    while(1)
    {
        //printf("ready to read udpsocket.\n");
        //从端口5555非阻塞接收
        bzero(msg,sizeof(msg));
        len = recvfrom(mysock,msg,sizeof(msg),0,(struct sockaddr*)&peer,(socklen_t*)&server_len);
        if (len > 0) {
            printf("recvfrom,len=%d,content=%s\n",len,msg);
        }

        //延时
        usleep(1000*1000);

        //从端口5556发送数据
        strcpy(msg,"hello");
        len = strlen(msg);
        len = sendto(mysock,msg,len,0,(struct sockaddr*)&client,sizeof(client));
        printf("sendto,len=%d,content=%s\n",len,msg);
    }
}


udpclient.c

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <fcntl.h>
#include <ctype.h>
#include <termios.h>
#include <sys/mman.h>
 
#define PORT 1234
#define MAXDATASIZE 100
 
int main()
{
    int mysock,len;
    struct sockaddr_in server,client,peer;
    char msg[256];
    int server_len,client_len;

    if((mysock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket");
        return -1;
    }
    else {
        printf("socket created,ID:%d\n",mysock);
    }
    server_len = sizeof(struct sockaddr_in);
    bzero(&server, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(5555);
    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    //addr.sin_addr.s_addr = INADDR_ANY;

    client_len = sizeof(struct sockaddr_in);
    bzero(&client, sizeof(client));
    client.sin_family = AF_INET;
    client.sin_port = htons(5556);
    client.sin_addr.s_addr = inet_addr("127.0.0.1");

    if(bind(mysock, (struct sockaddr*)&client, sizeof(client)) < 0)
    {
        perror("bind");
        return -1;
    }
    //非阻塞
    if (fcntl(mysock,F_SETFL,fcntl(mysock,F_GETFD,0)|O_NONBLOCK) != -1) {
        printf("fcntl success.\n");
    }
    else{
        printf("fcntl fail.\n");
    }

    while(1)
    {
        printf("ready to read udpsocket.\n");
        //从端口5556非阻塞接收
        bzero(msg,sizeof(msg));
        len = recvfrom(mysock,msg,sizeof(msg),0,(struct sockaddr*)&peer,(socklen_t*)&server_len);
        if (len > 0) {
            printf("recvfrom,len=%d,content=%s\n",len,msg);
        }

        //延时
        usleep(1000*1000);

        //从端口5555发送数据
        strcpy(msg,"1234567890");
        len = strlen(msg);
        len = sendto(mysock,msg,len,0,(struct sockaddr*)&server,sizeof(server));
        printf("sendto,len=%d,content=%s\n",len,msg);
    }
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值