C语言--利用UDP实现socket通信

服务器端代码

//  main.c

//  UDPService

//

//  Created by Andrew on 14-10-23.

//  Copyright (c) 2014 student. All rights reserved.



#include <stdio.h>


#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <netdb.h>

#include <unistd.h>

#include <stdlib.h>


#include <string.h>

int main(int argc, const char * argv[])

{


    //创建 UDP socket

    //参数一:固定写AF_INET

    //参数二:SOCK_DGARM表示UDP

    //

    int fd=socket(AF_INET, SOCK_DGRAM, 0);

    

    //生成一个地址

    struct sockaddr_in sin;

    bzero(&sin, sizeof(sin));//把结构体变量清零

    sin.sin_family=AF_INET;//固定写法

    sin.sin_addr.s_addr=htonl(INADDR_ANY);//表示可以从本机的任何网卡上的任何地址接受信息

    sin.sin_port=htons(56780);

    

    //绑定地址

    bind(fd, (struct sockaddr*)&sin, sizeof(sin));

    

    

    //发送方的地址

    struct sockaddr_in client_sin;

    bzero(&client_sin, sizeof(client_sin));

    socklen_t client_addr_len=sizeof(client_sin);

    

    //接受信息

    char message[256];


    while (1)

    {

        //接收信息,并返回收到的信息的长度

        //参数一:socket描述符

        //参数二:存储接收到得信息的buffer

        //参数三:buffer的长度

        //参数四:一些选项,0表示默认选项

        //参数五:本函数返回后将变为发送方的地址

        //参数六:地址的长度,调本函数之前必须想将其赋值为sockaddr_in这个结构体的字节数

        //返回值:收到的信息长度

        size_t message_len=recvfrom(fd, message, sizeof(message)-1, 0, (struct sockaddr*)&client_sin, &client_addr_len);

        message[message_len]='\0';

      

        if(!strcmp(message,"000111"))

        {

            strcpy(message, "server has stop!Andrew");

            sendto(fd, message, sizeof(message), 0, (struct sockaddr*)&client_sin, sizeof(client_sin));

            break;

        }

         printf("Receive message:%s\n",message);

        


        //printf("Receive message:%s\n",message);

        

        

        strcpy(message, "server has received your message!Andrew");

    

        //发送信息给客户端

        //参数一:socket描述符

        //参数二:存储要发送信息的buffer

        //参数三:buffer的长度

        //参数四:一些选项,0表示默认选项

        //参数五:本函数返回后将变为发送方的地址

        //参数六:地址的长度,调本函数之前必须想将其赋值为sockaddr_in这个结构体的字节数

        //返回值:收到的信息长度


        sendto(fd, message, sizeof(message), 0, (struct sockaddr*)&client_sin, sizeof(client_sin));

        

    }

    

    close(fd);

    return 0;

}



//客户端代码

//

//  main.c

//  UDPClient

//

//  Created by Andrew on 14-10-23.

//  Copyright (c) 2014 student. All rights reserved.

//


#include <stdio.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <netdb.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>


int main(int argc, const char * argv[])

{


    //创建一个socket

    int fd=socket(AF_INET, SOCK_DGRAM, 0);

    

    //生成服务器端地址

    struct sockaddr_in Service_Sin;

    bzero(&Service_Sin, sizeof(Service_Sin));

    Service_Sin.sin_family=AF_INET;

    Service_Sin.sin_addr.s_addr=inet_addr("10.0.178.209");

    Service_Sin.sin_port=htons(5678);

    

    

    //发送信息

    char message[256];

    //strcpy(message,"丽娜!Andrew");

    while (1)

    {

        scanf("%s",message);

        //printf("old:%s\n",message);

        sendto(fd, message, sizeof(message), 0, (struct sockaddr*)&Service_Sin, sizeof(Service_Sin));

        size_t len=recvfrom(fd, message, sizeof(message)-1, 0, NULL,NULL);

        message[len]='\0';

        printf("%s\n",message);

    }

    

    close(fd);

    return 0;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值