Skip to content

Commit

Permalink
upload 438
Browse files Browse the repository at this point in the history
  • Loading branch information
Hao Wang committed May 17, 2017
1 parent 645e761 commit d201caa
Show file tree
Hide file tree
Showing 100 changed files with 2,326 additions and 0 deletions.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added 438CommunicationNetworks/Exams/mtstudyguide.pdf
Binary file not shown.
Binary file added 438CommunicationNetworks/PSsolutions/ps1-sol.pdf
Binary file not shown.
Binary file added 438CommunicationNetworks/PSsolutions/ps2-sol.pdf
Binary file not shown.
Binary file added 438CommunicationNetworks/PSsolutions/ps3-sol.pdf
Binary file not shown.
Binary file added 438CommunicationNetworks/PSsolutions/ps5-sol.pdf
Binary file not shown.
Binary file added 438CommunicationNetworks/PSsolutions/ps6-sol.pdf
Binary file not shown.
Binary file added 438CommunicationNetworks/PSsolutions/ps7-sol.pdf
Binary file not shown.
39 changes: 39 additions & 0 deletions 438CommunicationNetworks/SVN repo/MP0/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# CS438 - spring 2013 MP0
#
# This is a simple example of a makefile, use this for reference when you create your own
#
# NOTE: if you decide to write your solution in C++, you will have to change the compiler
# in this file.

CC=/usr/bin/gcc
CC_OPTS=-g3
CC_LIBS=
CC_DEFINES=
CC_INCLUDES=
CC_ARGS=${CC_OPTS} ${CC_LIBS} ${CC_DEFINES} ${CC_INCLUDES}

# clean is not a file
.PHONY=clean

#target "all" depends on all others
all: client server listener talker mp0client

# client C depends on source file client.c, if that changes, make client will
# rebuild the binary
mp0client: mp0client.c
@${CC} ${CC_ARGS} -o mp0client mp0client.c

client: client.c
@${CC} ${CC_ARGS} -o client client.c

listener: listener.c
@${CC} ${CC_ARGS} -o listener listener.c

talker: talker.c
@${CC} ${CC_ARGS} -o talker talker.c

server: server.c
@${CC} ${CC_ARGS} -o server server.c

clean:
@rm -f talker server client listener mp0client *.o
94 changes: 94 additions & 0 deletions 438CommunicationNetworks/SVN repo/MP0/client.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/*
** client.c -- a stream socket client demo
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#include <arpa/inet.h>

#define PORT "3490" // the port client will be connecting to

#define MAXDATASIZE 100 // max number of bytes we can get at once

// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}

return &(((struct sockaddr_in6*)sa)->sin6_addr);
}

int main(int argc, char *argv[])
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct addrinfo hints, *servinfo, *p;
int rv;
char s[INET6_ADDRSTRLEN];

if (argc != 2) {
fprintf(stderr,"usage: client hostname\n");
exit(1);
}

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

if ((rv = getaddrinfo(argv[1], PORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}

// loop through all the results and connect to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("client: socket");
continue;
}

if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("client: connect");
continue;
}

break;
}

if (p == NULL) {
fprintf(stderr, "client: failed to connect\n");
return 2;
}

inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr),
s, sizeof s);
printf("client: connecting to %s\n", s);

freeaddrinfo(servinfo); // all done with this structure

if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv");
exit(1);
}

buf[numbytes] = '\0';

printf("client: received '%s'\n",buf);

close(sockfd);

return 0;
}

95 changes: 95 additions & 0 deletions 438CommunicationNetworks/SVN repo/MP0/listener.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*
** listener.c -- a datagram sockets "server" demo
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

#define MYPORT "4950" // the port users will be connecting to

#define MAXBUFLEN 100

// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}

return &(((struct sockaddr_in6*)sa)->sin6_addr);
}

int main(void)
{
int sockfd;
struct addrinfo hints, *servinfo, *p;
int rv;
int numbytes;
struct sockaddr_storage their_addr;
char buf[MAXBUFLEN];
socklen_t addr_len;
char s[INET6_ADDRSTRLEN];

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // set to AF_INET to force IPv4
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE; // use my IP

if ((rv = getaddrinfo(NULL, MYPORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}

// loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("listener: socket");
continue;
}

if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("listener: bind");
continue;
}

break;
}

if (p == NULL) {
fprintf(stderr, "listener: failed to bind socket\n");
return 2;
}

freeaddrinfo(servinfo);

printf("listener: waiting to recvfrom...\n");

addr_len = sizeof their_addr;
if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0,
(struct sockaddr *)&their_addr, &addr_len)) == -1) {
perror("recvfrom");
exit(1);
}

printf("listener: got packet from %s\n",
inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr),
s, sizeof s));
printf("listener: packet is %d bytes long\n", numbytes);
buf[numbytes] = '\0';
printf("listener: packet contains \"%s\"\n", buf);

close(sockfd);

return 0;
}
149 changes: 149 additions & 0 deletions 438CommunicationNetworks/SVN repo/MP0/mp0client.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
/*
** client.c -- a stream socket client demo
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#include <arpa/inet.h>

#define MAXDATASIZE 100 // max number of bytes we can get at once

// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}

return &(((struct sockaddr_in6*)sa)->sin6_addr);
}

int main(int argc, char *argv[])
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct addrinfo hints, *servinfo, *p;
int rv;
char s[INET6_ADDRSTRLEN];

char *msg = "HELO\n";
char *repeat = "RECV\n";
char *bye = "BYE\n";
char *netid_part1 = "USERNAME ";
char *netid_part2 = argv[3];
char *netid_part3 = "\n";
char netid[20],temp1[20],temp2[5];
strcpy(netid,netid_part1);
strcpy(temp1,netid_part2);
strcpy(temp2,netid_part3);
strcat(netid, temp1);
strcat(netid, temp2);

int len, bytes_sent;

if (argc != 4) {
fprintf(stderr,"usage: client hostname\n");
exit(1);
}

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

if ((rv = getaddrinfo(argv[1], argv[2], &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}

// loop through all the results and connect to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("client: socket");
continue;
}

if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("client: connect");
continue;
}

break;
}

if (p == NULL) {
fprintf(stderr, "client: failed to connect\n");
return 2;
}

// inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr),
// s, sizeof s);

freeaddrinfo(servinfo); // all done with this structure

// HELO -> 100 - OK
len = strlen(msg);
bytes_sent = send(sockfd, msg, len, 0);
if(len != bytes_sent){ // check number of bytes sent
perror("send");
exit(1);
}
if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv");
exit(1);
}

// USERNAME haow4 -> 200 - Username: haow4
len = strlen(netid);
bytes_sent = send(sockfd, netid, len, 0);
if(len != bytes_sent){ // check number of bytes sent
perror("send");
exit(1);
}
if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv");
exit(1);
}

// Repeat RECV
len = strlen(repeat);
for(int i = 0; i < 10; i++){
bytes_sent = send(sockfd, repeat, len, 0);
if(len != bytes_sent){ // check number of bytes sent
perror("send");
exit(1);
}
if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("Received: %s", buf+12);
}

// Send bye
len = strlen(bye);
bytes_sent = send(sockfd, bye, len, 0);
if(len != bytes_sent){ // check number of bytes sent
perror("send");
exit(1);
}
if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv");
exit(1);
}
buf[numbytes] = '\0';

close(sockfd);

return 0;
}
Loading

0 comments on commit d201caa

Please sign in to comment.