Linux C 套接字socket UDP

来源:互联网 发布:mac页面比例缩小快捷键 编辑:程序博客网 时间:2024/05/17 03:45

server端:

                   int sockfd;          sockfd = socket(AF_INET, SOCK_DGRAM, 0);  //创建套接字   SOCK_DGRAM : UDP

                   struct sockaddr_in server_Addr;         serverAddr.sin_family = AF_INET;  //AF_INET : IPv4协议族

                                                                                     serverAddr.sin_port = htons(5678);  //端口号

                                                                                     serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);  //任意本机地址

                   bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr));  //绑定套接口

                   int rcvLen;     rcvLen = recvfrom(sockfd, readbuf, 128, 0, (struct sockaddr *)&clientAddr, &len);  //读取(接收)

                   sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&clientAddr, len);  //写入(发送)

          

client端:

                    int sockfd;    sockfd = socket(******************);

                    struct sockaddr_in clientAddr;          clientAddr.sin_family = AF_INET;

                                                                                    clientAddr.sin_port = htons(5678);

                                                                                    clientAddr.sin_addr.s_addr = htonl("127.0.0.1");

                    sendto(sockfd, "hello", 6, 0, (struct sockaddr *)&clientAddr, sizeof(struct sockaddr));

                    int rcvLen;       rcvLen = rcvfrom(sockfd, rcvbuf, 128, 0, (struct sockaddr *)clientAddr, &len);



代码(server端):

  1 /*  2  *  File: UDP_server.c  3  *   4  *  创建套接字、绑定套接字、读写数据、关闭套接字  5  *  6  * */  7   8 #include <stdio.h>  9 #include <netinet/in.h> 10 #include <string.h> 11 #include <time.h> 12  13 int main() 14 { 15         int sockfd; 16         struct sockaddr_in serverAddr, clientAddr; 17         socklen_t len = sizeof(struct sockaddr); 18  19         int rcvLen; 20         char readbuf[128], sendbuf[128]; 21         time_t mytime; 22  23         sockfd = socket(AF_INET, SOCK_DGRAM, 0);  //创建 套接字 24         printf("server socket create success. sockfd = %d\n", sockfd); 25  26         serverAddr.sin_family = AF_INET;  //AF_INET  IPv4协议族 27         serverAddr.sin_port = htons(5678);  //端口号 28         serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);  //任意本机地址 29  30         bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr));  //绑定套接字  31         printf("***********\n"); 32  33                 rcvLen = recvfrom(sockfd, readbuf, 128, 0, (struct sockaddr *)(&clientAddr), &len);  //读 34                 if(rcvLen < 0) 35                 { 36                         printf("ERROR: receive failure.\n"); 37                         close(sockfd); 38                         return -1; 39                 } 40  41                 printf("client IP: 0x%X, port: %d\n", ntohl(clientAddr.sin_addr.s_addr), ntohs(clientAddr.sin_port)); 42                 printf("receive %d bytes: %s\n", rcvLen, readbuf); 43                 mytime = time(NULL); 44                 snprintf(sendbuf, sizeof(sendbuf), "%s", ctime(&mytime)); 45                 sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&clientAddr, len);  //写 46  47                 bzero(sendbuf, 128); 48                 snprintf(sendbuf, sizeof(sendbuf), "%s", "华人牌2060款手机傻妞为您服务!请输入开机密码..."); 49                 sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&clientAddr, len);       //写 50  51                 //bzero(&clientAddr, len); 52         while(1) 53         { 54                 bzero(sendbuf, 128); 55                 bzero(readbuf, 128); 56                 recvfrom(sockfd, readbuf, sizeof(readbuf), 0, (struct sockaddr *)&clientAddr, &len); 57                 printf("client IP: 0X%X, port: %d > %s", 58                                           ntohl(clientAddr.sin_addr.s_addr), ntohs(clientAddr.sin_port), readbuf); 59                 printf("可爱的自己 > "); 60                 fgets(sendbuf, sizeof(sendbuf), stdin); 61                 sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&clientAddr, len); 62         } 63  64         close(sockfd); 65         return 0; 66 }


代码(client):

  1 #include <stdio.h>  2 #include <netinet/in.h>  3 #include <string.h>  4   5 int main(int argc, char *argv[])  6 {  7         int sockfd;  8   9         //short int sin_family; 协议族,在socket编程中 只能是AF_INET 10         //unsigned short int sin_port;  端口号,使用网络字节顺序 11         //struct in_addr sin_addr; 含unsigned long s_addr; 存储IP地址 12         //unsigned char sin_zero[8]; 13         struct sockaddr_in servAddr;    //库 <netinet/in.h> 14         socklen_t len = sizeof(struct sockaddr); 15  16         int rcvLen; 17         char rcvbuf[128], sendbuf[128]; 18  19         //int socket(int domain, int type, int protocol) 20         //参数domain;设置网络通信的域,即选择通信协议族。AF_INET为IPv4 21         //参数type:设置套接字通信的类型,主要有SOCK_STREAM(流式套接字,TCP连接)、SOCK_DGRAM(数据包套接字,UDP连接) 22         //参数protocol:制定type协议类型中的某个特定类型。通常某协议中只有一种特定类型,即protocol参数仅能设为0 23         sockfd = socket(AF_INET, SOCK_DGRAM, 0);        //创建 套接字 24         printf("client socket create success. sockfd = %d\n", sockfd); 25         printf(" ********************************\n"); 26         //bzero(&servAddr, sizeof(servAddr));   //初始化 servAddr变量 27         servAddr.sin_family = AF_INET; 28         servAddr.sin_port = htons(5678); 29         servAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 30  31         //client端 connect 连接 32         //connect(sockfd, (struct sockaddr *)&servAddr, sizeof(servAddr));      //连接 套接字 和 IP 33         //UDP无须连接,直接发送 34         sendto(sockfd, "hello\n", 8, 0, (struct sockaddr *)(&servAddr), sizeof(struct sockaddr)); //写 35  36         //rcvLen = read(sockfd, rcvbuf, 128);   //读取 信息 37         bzero(rcvbuf, sizeof(rcvbuf)); 38         rcvLen = recvfrom(sockfd, rcvbuf, sizeof(rcvbuf), 0, (struct sockaddr *)&servAddr, &len); //读 39  40         if(rcvLen < 0) 41         { 42                 printf("ERROR: read failure.\n"); 43                 return -1; 44         } 45         if(rcvLen == 0) 46         { 47                 printf("Server close connection.\n"); 48                 return -1; 49         } 50         printf("receive data[%d bytes]: %s", rcvLen, rcvbuf); 51  52         bzero(rcvbuf, sizeof(rcvbuf)); 53         rcvLen = recvfrom(sockfd, rcvbuf, sizeof(rcvbuf), 0, (struct sockaddr *)&servAddr, &len); 54         printf("receive data[%d bytes]: %s\n", rcvLen, rcvbuf); 55         while(1) 56         { 57                 bzero(rcvbuf, sizeof(rcvbuf)); 58                 bzero(sendbuf, sizeof(sendbuf)); 59                 printf("me > "); 60                 fgets(sendbuf, sizeof(sendbuf), stdin); 61                 sendto(sockfd, sendbuf, sizeof(sendbuf), 0, (struct sockaddr *)&servAddr, len); 62                 recvfrom(sockfd, rcvbuf, sizeof(rcvbuf), 0, (struct sockaddr *)&servAddr, &len); 63                 printf("傻妞 IP: 0x%X port: %d > %s\n", 64                                       ntohl(servAddr.sin_addr.s_addr), ntohs(servAddr.sin_port), rcvbuf); 65         } 66         close(sockfd); 67  68         return 0; 69 }

执行:





原创粉丝点击