UNIX Socket UDP 代码

来源:互联网 发布:网络宽带设置 编辑:程序博客网 时间:2024/06/04 19:16

客户端

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <arpa/inet.h>#include <unistd.h>// UDP 通讯程序代码-Clientint main(int argc, char* argv[]){if (argc < 2){printf("Please input something!\r\n");exit(1);}// 因为是UDP套接字,使用SOCK_DGRAM,而不是SOCK_STREAMint sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP/*TCP使用0*/);if (sock < 0){printf("创建套接字失败!\r\n");exit(1);}// Send tostruct sockaddr_in toAddr;memset(&toAddr, 0, sizeof(toAddr));toAddr.sin_family = AF_INET;toAddr.sin_addr.s_addr = inet_addr("127.0.0.1");toAddr.sin_port = htons(4000);// Start to send toif (sendto(sock, argv[1], strlen(argv[1]), 0, (struct sockaddr*)&toAddr, sizeof(toAddr)) != strlen(argv[1])){printf("sendto()函数使用失败!,\r\n");close(sock);exit(1);}// Receive formstruct sockaddr_in fromAddr;char recvBuffer[128] = {0};unsigned int fromLen = sizeof(fromAddr);if( recvfrom(sock, recvBuffer, 128, 0, (struct sockaddr*)&fromAddr, &fromLen) < 0){printf("recvfrom()函数使用失败!,\r\n");close(sock);exit(1);}// 把接收的数据输出到屏幕上printf("recvfrom()result: %s\r\n", recvBuffer);close(sock);return 0;}

服务端

// UDP Server#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <arpa/inet.h>#include <unistd.h>int main(){// Create UDP socketint sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (sock < 0){printf("Create socket faild\r\n");exit(1);}// Bind socket and the client of send link requeststruct sockaddr_in fromAddr;memset(&fromAddr, 0, sizeof(fromAddr));fromAddr.sin_family = AF_INET;fromAddr.sin_addr.s_addr = htonl(INADDR_ANY);fromAddr.sin_port = htons(4000);if (bind(sock, (struct sockaddr*)&fromAddr, sizeof(fromAddr)) < 0){printf("Bind socket faild!\r\n");close(sock);exit(1);}struct sockaddr_in toAddr;char recvBuffer[128] = {0};int recvLen = -1;unsigned int addrLen = sizeof(toAddr);while(1){if ((recvLen = recvfrom(sock, recvBuffer, 128, 0, (struct sockaddr*)&toAddr, &addrLen)) < 0){printf("Receive message faild!\r\n");close(sock);exit(1);}if (recvLen > 0){printf("Recive message:%s\r\n", recvBuffer);}if (sendto(sock, recvBuffer, recvLen, 0, (struct sockaddr*)&toAddr, sizeof(toAddr)) != recvLen){printf("sendto faild\r\n");close(sock);exit(1);}}close(sock);return 0;}



原创粉丝点击