Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1253073
  • 博文数量: 177
  • 博客积分: 1528
  • 博客等级: 上尉
  • 技术积分: 1891
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 18:03
文章分类

全部博文(177)

文章存档

2020年(1)

2018年(19)

2017年(4)

2016年(21)

2015年(40)

2014年(13)

2013年(26)

2012年(16)

2011年(37)

我的朋友

分类: LINUX

2013-05-07 10:13:29

转自:

要使用UDP协议进行通讯,需要以下几个步骤:

  • 服务器端(接收着端):
  1. 创建套接字。
  2. 将创建的套接字绑定到本地的地址和端口上。
  3. 等待接收数据。
  4. 关闭套接字。
  • 客户端(发送端):
  1. 创建套接字。
  2. 向服务器端发送数据。
  3. 关闭套接字。

服务器端代码:

 

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

int main(int argc,char **argv) {
    int z;
    char *srvr_addr = NULL;
    struct sockaddr_in adr_inet;
    struct sockaddr_in adr_clnt;
    int len_inet;
    int s; 
    char dgram[512];  

    char dtfmt[512];

    srvr_addr = "127.0.0.23";

    s = socket(AF_INET,SOCK_DGRAM,0);
    memset(&adr_inet,0,sizeof adr_inet);
    adr_inet.sin_family = AF_INET;
    adr_inet.sin_port = htons(9090);
    adr_inet.sin_addr.s_addr =inet_addr(srvr_addr);

    len_inet = sizeof adr_inet;

    z = bind(s,(struct sockaddr *)&adr_inet,len_inet);    

    for (;;) {

       len_inet = sizeof adr_clnt;
        z = recvfrom(s, dgram, sizeof dgram, 0,(struct sockaddr *)&adr_clnt, &len_inet); 
       dgram[z] = 0; 
       printf("%s:%s\n",inet_ntoa(adr_clnt.sin_addr),dgram);
       fputs("Enter:",stdout);
       if ( !fgets(dtfmt,sizeof dtfmt,stdin) )
       break;
       z = sendto(s,dtfmt,strlen(dtfmt),0,(struct sockaddr *)&adr_clnt,len_inet);  

    }
    close(s);
    return 0;
}

客户端代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

int main(int argc,char **argv) {
    int z;
    int x;
    char *srvr_addr = NULL;
    struct sockaddr_in adr_srvr;
    struct sockaddr_in adr; 
    int len_inet;
    int s;
    char dgram[512]; 

    srvr_addr = "127.0.0.23"
    memset(&adr_srvr,0,sizeof adr_srvr);

    adr_srvr.sin_family = AF_INET;

    adr_srvr.sin_port = htons(9090);

    adr_srvr.sin_addr.s_addr =

    inet_addr(srvr_addr);

    len_inet = sizeof adr_srvr;

    s = socket(AF_INET,SOCK_DGRAM,0);

    for (;;) {
        fputs("Enter:",stdout);

        if ( !fgets(dgram,sizeof dgram,stdin) )

            break;
        z = strlen(dgram);
        if ( z > 0 && dgram[--z] == '\n' )
            dgram[z] = 0; 
        z = sendto(s,dgram,strlen(dgram),0,(struct sockaddr *)&adr_srvr,len_inet); 
        x = sizeof adr;
        z = recvfrom(s,dgram,sizeof dgram, 0,(struct sockaddr *)&adr,  &x);
        dgram[z] = 0;
        printf("%s:%s\n",inet_ntoa(adr.sin_addr),dgram);
    }
    close(s);
    return 0;
}

阅读(1068) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~