网络编程——UDP编程

一个简单的聊天代码:运行结果:

在这个程序之中,由于recvfrom函数拥塞函数,没有数据时会一直阻塞,所以客户端和服务器端只能通过一回一答的方式进行信息传递。严格的讲UDP没有明确的客户端和服务端,谁先进行数据传输,谁就是客户端,客户端也有可能是服务器端。

代码1:

 1 #include"common.h"
 2 
 3 int main()
 4 {
 5     int fd;int saddr_len;
 6     int ret;
 7     char buf[1024];
 8     struct sockaddr_in saddr;
 9 
10     fd = socket(AF_INET, SOCK_DGRAM, 0);
11     if(fd < 0)
12     {
13         printf("create socket fail!\n");
14         return -1;
15     }
16 
17     saddr.sin_family=AF_INET;
18     saddr.sin_port=htons(9000);
19     inet_pton(AF_INET,"192.168.6.128",&saddr.sin_addr.s_addr);
20     
21     while(1)
22     {
23         printf("cli:");
24         gets(buf);
25         ret=sendto(fd,buf,1024,0,(struct sockaddr*)&saddr,sizeof(saddr));
26     
27         saddr_len=sizeof(saddr);
28         recvfrom(fd,buf,1024,0,(struct sockaddr*)&saddr,&saddr_len);
29     printf("ser:%s\n",buf);
30     }
31 
32     close(fd);
33 
34     return 0;
35 }

代码2:

#include"common.h"

int main()
{
    int fd;
    int ret;
    int addr_len;
    struct sockaddr_in saddr,caddr;
    char buf[1024];

    fd=socket(AF_INET,SOCK_DGRAM,0);
    if(fd<0)
    {
        perror("socket");
    }
    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(9000);
    inet_pton(AF_INET,"192.168.6.128",&saddr.sin_addr.s_addr);

    ret=bind(fd,(struct sockaddr*)&saddr,sizeof(saddr));
    if (ret<0)
    {
        perror("bind");
    }

    addr_len=sizeof(caddr);
    while(1)
    {
        
        ret=recvfrom(fd,buf,1024,0,(struct sockaddr*)&caddr,&addr_len);
        if(ret==-1)
        {
            perror("cecvfrom");
        }

        printf("cli:%s\n",buf);
        printf("ser:");
        gets(buf);
        sendto(fd,buf,1024,0,(struct sockaddr*)&caddr,sizeof(caddr));
    
    }
    close(fd);
    return 0;
}
            

猜你喜欢

转载自www.cnblogs.com/it8343/p/9278348.html