대학 생활/C
[C] UDP 채팅 프로그램(단순 주고받는 핑퐁) - 네트워크 과제
opid
2014. 11. 19. 12:05
window
#include <stdio.h> #include <WinSock2.h> #define PORT 7230 #define IP "127.0.0.01" #define MAXLINE 256 struct Msg { char data[MAXLINE]; int length; int msgNum; }; int main(int argc, char **argv) { WSADATA wsaData; SOCKET sockfd; struct sockaddr_in addr, recvAddr; int addrlen; int currentMsgNum = 0; struct Msg msg; if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0) { return 1; } if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) { return -1; } memset((void *)&addr, 0x00, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr = inet_addr(IP); addr.sin_port = htons(PORT); while(1) { memset(msg.data, 0x00, MAXLINE); printf(">> "); scanf("%s", msg.data); msg.length = htonl(strlen(msg.data)); msg.msgNum = htonl(currentMsgNum++); addrlen = sizeof(addr); sendto(sockfd, (char *)&msg, sizeof(msg), 0, (struct sockaddr *)&addr, addrlen); memset(msg.data, 0x00, MAXLINE); recvfrom(sockfd, (char *)&msg, sizeof(msg), 0, (struct sockaddr *)&addr, &addrlen); printf("SERVER >> %s\n", msg.data); } closesocket(sockfd); WSACleanup(); return 0; }
unix
#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #define PORT 7230 #define MAXLEN 256 struct Msg { char data[MAXLEN]; int length; int msgNum; }; int main(int argc, char **argv) { int sockfd; socklen_t addrlen; struct Msg msg; struct sockaddr_in addr, cliaddr; int currentNum = 0; if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { return 1; } memset((void *)&addr, 0x00, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(PORT); addrlen = sizeof(addr); if(bind(sockfd, (struct sockaddr *)&addr, addrlen) == -1) { return -1; } printf("running...\n"); while(1) { addrlen = sizeof(cliaddr); recvfrom(sockfd, (char *)&msg, sizeof(msg), 0, (struct sockaddr *)&cliaddr, &addrlen); printf("client >> %s\n", msg.data); memset((void *)&msg, 0x00, sizeof(msg)); printf(">> "); scanf("%s", msg.data); msg.length = htonl(strlen(msg.data)); msg.msgNum = htonl(currentNum++); printf("%s %d %d \n", msg.data, msg.length, msg.msgNum); sendto(sockfd, (void *)&msg, sizeof(msg), 0, (struct sockaddr *)&cliaddr, addrlen); } return 1; }