socket网络编程:UDP客户端和回射服务器

mac2024-03-25  29

主要涉及到的函数有:

#include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

客户端的实现:

#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <unistd.h> int main() { int sockfd = socket( AF_INET, SOCK_DGRAM, 0 ); if ( -1 == sockfd ) { perror( "sock created" ); exit( -1 ); } struct sockaddr_in server; memset(&server, 0, sizeof( struct sockaddr_in )); server.sin_family = AF_INET; server.sin_port = htons(6666); server.sin_addr.s_addr = inet_addr( "127.0.0.1" ); #define MAXSIZE 255 char achBuf[MAXSIZE] = {0}; unsigned int socklen = sizeof(server); while (gets(achBuf)) { int nlen = sizeof(server); sendto(sockfd, achBuf, strlen(achBuf), 0, (const sockaddr*)(&server), nlen); recvfrom(sockfd, achBuf, MAXSIZE, 0, (sockaddr*)&server, &socklen); printf("%s\n", achBuf); } close(sockfd); }

服务端的实现:

#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <unistd.h> int main() { int sockfd = socket( AF_INET, SOCK_DGRAM, 0 ); if ( -1 == sockfd ) { perror( "sock created" ); exit( -1 ); } struct sockaddr_in server, client; memset(&server, 0, sizeof( struct sockaddr_in )); server.sin_family = AF_INET; server.sin_port = htons(6666); server.sin_addr.s_addr = htonl(INADDR_ANY); int bindres = bind(sockfd, (struct sockaddr *)&server, sizeof(server)); if ( -1 == bindres ) { perror( "sock created" ); exit( -1 ); } #define MAXSIZE 255 char achBuf[MAXSIZE] = {0}; unsigned int sockLen = sizeof(client); while (true) { memset(achBuf, 0, sizeof(achBuf)); int nLen = recvfrom(sockfd, achBuf, MAXSIZE, 0, (sockaddr*)&client, &sockLen); sendto(sockfd, achBuf, nLen, 0, (const sockaddr*)(&client), sockLen); } close(sockfd); }
最新回复(0)