aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/client-polled.c71
-rwxr-xr-xsrc/client.c84
-rwxr-xr-xsrc/main.c56
3 files changed, 211 insertions, 0 deletions
diff --git a/src/client-polled.c b/src/client-polled.c
new file mode 100755
index 0000000..9a88436
--- /dev/null
+++ b/src/client-polled.c
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <poll.h>
+#include "iceys-utils.c"
+
+#define SA(ptr) ((struct sockaddr *)(ptr))
+
+int main(int argc, char *argv[]){
+ if (argc<2){
+ fprintf(stderr, "arg1 must be set for port\n");
+ exit(-1);
+ }
+ int port = atoi(argv[1]);
+ if (port == 0) {
+ fprintf(stderr, "port must not be 0\n");
+ exit(-1);
+ }
+
+ int socketfd = socket(AF_INET, SOCK_STREAM, 0);
+
+
+ struct sockaddr_in address = {0};
+ address.sin_family = AF_INET;
+ address.sin_port = htons(port);
+ address.sin_addr.s_addr = inet_addr("127.0.0.1");
+
+
+ int con_err=connect(socketfd, SA(&address), sizeof(address));
+ if (con_err<0){
+ printf("connect error %d\n",con_err);
+ perror("socketfd error");
+ exit(-1);
+ }
+
+ struct pollfd fds[2] = {
+ {
+ 0,
+ POLLIN,
+ 0
+ },
+ {
+ socketfd,
+ POLLIN,
+ 0
+ }
+ };
+
+
+ for (;;){
+ char buffer[30000]={0};
+ poll(fds, 2, 50000);
+
+ if (fds[0].revents & POLLIN) {
+ read(0, buffer, 30000);
+ send(socketfd, buffer, 30000, 0);
+ } else if(fds[1].revents & POLLIN){
+ //if(read(socketfd,buffer,30000)<0){ printf("\nREAD FAILED\n\n"); close(new_socket); break; }
+ if(recv(socketfd, buffer, 30000, 0)==0){
+ printf("recv got 0 --client\n\n");
+ exit(1);
+ }
+ printf("%s\n",buffer);
+
+ }
+ }
+
+ return 0;
+}
diff --git a/src/client.c b/src/client.c
new file mode 100755
index 0000000..4f68d89
--- /dev/null
+++ b/src/client.c
@@ -0,0 +1,84 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <poll.h>
+#include <pthread.h>
+#include <string.h>
+#include "launch-socket.c"
+#include "iceys-utils.c"
+
+#define SA(ptr) ((struct sockaddr *)(ptr))
+
+void *recv_data_c(void *arg) {
+ int socketfd = *(int *)arg;
+ while(1){
+ char buffer[30000]={0};
+ recv(socketfd, buffer, 30000, 0);
+ printf("%s\n ",buffer);
+ }
+}
+
+int main(int argc, char *argv[]){
+ if (argc<2){
+ fprintf(stderr, "arg1 must be set for port\n");
+ exit(-1);
+ }
+ int port = atoi(argv[1]);
+ if (port == 0) {
+ fprintf(stderr, "port must not be 0\n");
+ exit(-1);
+ }
+
+ int socketfd = socket(AF_INET, SOCK_STREAM, 0);
+
+ struct sockaddr_in address = {0};
+ address.sin_family = AF_INET;
+ address.sin_port = htons(port);
+ address.sin_addr.s_addr = inet_addr("127.0.0.1");
+
+
+ int con_err=connect(socketfd, SA(&address), sizeof(address));
+ if (con_err<0){
+ printf("connect error %d\n",con_err);
+ perror("socketfd error");
+ exit(-1);
+ }
+
+ char *name = NULL;
+ size_t nameSize = 0;
+ printf("please enter your name\n");
+ ssize_t nameCount = getline(&name, &nameSize, stdin);
+ name[nameCount-1]=0; //gets rid of newline
+
+
+ char *line = NULL;
+ size_t lineSize = 0;
+
+ pthread_t id;
+ pthread_create(&id, NULL, recv_data_c, &socketfd);
+
+
+ char send_buf[30000];
+
+ while(1){
+ ssize_t charCount = getline(&line, &lineSize, stdin);
+ line[charCount-1]=0; //gets rid of newline
+ sprintf(send_buf, "%s:%s", name, line);
+
+ if(charCount>0){
+ if(strcmp(line,"exit")==0){
+ break;
+ } else {
+ send(socketfd, send_buf, strlen(send_buf), 0);
+ }
+ }
+ }
+
+
+ close(socketfd);
+
+
+ return 0;
+}
diff --git a/src/main.c b/src/main.c
new file mode 100755
index 0000000..8b28d63
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,56 @@
+#include <launch-socket.c>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+// dont use stdio in these
+sig_atomic_t running = 1;
+void sig_int_handler(int num)
+{
+ running = 0;
+}
+
+void on_message(struct Server* server, char message[], ssize_t amountRecv, int socketFD)
+{
+ if (amountRecv > 0) {
+ printf("%s\n", message);
+
+ struct AcceptedSocket* sel_socket = server->accepted_socket;
+ while (sel_socket != NULL) {
+ if (sel_socket->socketFD != socketFD) {
+ send(sel_socket->socketFD, message, 30000, 0);
+ }
+ sel_socket = sel_socket->next;
+ }
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2) {
+ fprintf(stderr, "arg1 must be set for port\n");
+ exit(-1);
+ }
+ int port = atoi(argv[1]);
+ if (port == 0) {
+ fprintf(stderr, "port must not be 0\n");
+ exit(-1);
+ }
+
+ struct Server server = server_constructor(AF_INET, SOCK_STREAM, 0, INADDR_ANY, port, 10, launch_socket);
+ server.on_message = on_message;
+ pthread_t server_thread = server.launch(&server);
+
+ struct sigaction act = { 0 };
+ act.sa_handler = &sig_int_handler;
+ sigaction(SIGINT, &act, NULL);
+
+ while (running) { }
+
+ server_close_socket(&server);
+ pthread_join(server_thread, NULL);
+
+ return 0;
+}