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;
}