UDP通信
linux平台下 C语言如何用UDP写一个向指定IP和端口号发送字符串的简单小程序 希望能贴出代码来
先谢谢了!
[解决办法]
- C/C++ code
//服务器端代码#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(int argc, char *argv[]){int sock;//sendto中使用的对方地址struct sockaddr_in toAddr;//在recvfrom中使用的对方主机地址struct sockaddr_in fromAddr;int recvLen;unsigned int addrLen;char recvBuffer[128];sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);if(sock < 0){ printf("创建套接字失败了.\r\n"); exit(0);}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() 函数使用失败了.\r\n"); close(sock); exit(1);}while(1){addrLen = sizeof(toAddr);if((recvLen = recvfrom(sock,recvBuffer,128,0,(struct sockaddr*)&toAddr,&addrLen))<0){ printf("()recvfrom()函数使用失败了.\r\n"); close(sock); exit(1);}if(sendto(sock,recvBuffer,recvLen,0,(struct sockaddr*)&toAddr,sizeof(toAddr))!=recvLen){printf("sendto fail\r\n");close(sock);exit(0);}return 0;}}//客户端代码#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(int argc, char *argv[]){if(argc < 2){ printf("请输入要传送的内容.\r\n"); exit(0);}int sock;//sendto中使用的对方地址struct sockaddr_in toAddr;//在recvfrom中使用的对方主机地址struct sockaddr_in fromAddr;unsigned int fromLen;char recvBuffer[128];sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);if(sock < 0){ printf("创建套接字失败了.\r\n"); exit(1);}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);if(sendto(sock,argv[1],strlen(argv[1]),0,(struct sockaddr*)&toAddr,sizeof(toAddr)) != strlen(argv[1])){ printf("sendto() 函数使用失败了.\r\n"); close(sock); exit(1);}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);}