UDP套接字编程

来源:互联网 发布:全球夜间灯光数据 编辑:程序博客网 时间:2024/04/28 08:24
  • client
#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<netinet/in.h>#include<arpa/inet.h>#include<stdlib.h>void usage(const char* proc){        printf("usage:%s [local_ip] [local_port]\n",proc);}int main(int argc,char*argv[]){        if(argc != 3)        {            usage(argv[0]);            return 1;        }        int sk = socket(AF_INET,SOCK_DGRAM,0);        if(sk < 0)        {            perror("socket");            return 2;        }        char buf[1024];        struct sockaddr_in server;        server.sin_family = PF_INET;        server.sin_port = htons(atoi(argv[2]));        server.sin_addr.s_addr = inet_addr(argv[1]);                    socklen_t len = sizeof(server);        while(1)        {            printf("Please Enter#:");            fflush(stdout);            ssize_t s = read(0,buf,sizeof(buf)-1);            if(s > 0)            {                buf[s-1] = 0;                sendto(sk,buf,sizeof(buf)-1,0,(struct sockaddr*)&server,len);                s = recvfrom(sk,buf,sizeof(buf)-1,0,(struct sockaddr*)&server,&len);                if(s>0)                {                    buf[s] = 0;                    printf("server -> client: %s\n", buf);                }            }        }        return 0;}
  • server
nclude<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<netinet/in.h>#include<arpa/inet.h>#include<stdlib.h>void usage(const char* proc){        printf("usage:%s [local_ip] [local_port]\n",proc);}int main(int argc,char*argv[]){        if(argc != 3)        {            usage(argv[0]);            return 1;        }        int sk = socket(AF_INET,SOCK_DGRAM,0);        if(sk < 0)        {            perror("socket");            return 2;        }        struct sockaddr_in local;        local.sin_family = PF_INET;        local.sin_port = htons(atoi(argv[2]));        local.sin_addr.s_addr =inet_addr(argv[1]);        if(bind(sk,(struct sockaddr*)&local,sizeof(local))<0)        {             perror("bind");            return 3;        }        while(1)        {            char buf[1024];            struct sockaddr_in client;            socklen_t len = sizeof(client);            ssize_t s = recvfrom(sk, buf, sizeof(buf)-1, 0, (struct sockaddr*)&client,&len);            if(s > 0)            {                buf[s] = 0;                printf("client -> server: %s\n",buf);                sendto(sk,buf,strlen(buf), 0, (struct sockaddr*)&client, len);            }            else            {                close(sk);                printf("client quit...\n");                break;            }        }        return 0;}
原创粉丝点击