From 1edcf73a73d2007afc61289245763f5cf0c29e10 Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Thu, 04 Dec 2014 07:20:29 +0000
Subject: [PATCH] Detection good, split up col images

---
 src/server.c |   70 ++++++++++++++++++++++++++++++----
 1 files changed, 61 insertions(+), 9 deletions(-)

diff --git a/src/server.c b/src/server.c
index 9837960..bcb59f5 100644
--- a/src/server.c
+++ b/src/server.c
@@ -6,13 +6,22 @@
 #include <netdb.h>
 
 #include "server.h"
+#include "connected_layer.h"
 
-#define MESSAGESIZE 512
+#define MESSAGESIZE 50012
+#define NUMFLOATS ((MESSAGESIZE-12)/4)
 #define SERVER_PORT 9876
 #define CLIENT_PORT 9879
 #define STR(x) #x
 #define PARAMETER_SERVER localhost
 
+typedef struct{
+    int layer;
+    int wob;
+    int offset;
+    float data[NUMFLOATS];
+} message;
+
 int socket_setup(int port)
 {
     static int fd = 0;                         /* our socket */
@@ -42,27 +51,38 @@
     return fd;
 }
 
-void server_update()
+void server_update(network net)
 {
     int fd = socket_setup(SERVER_PORT);
     struct sockaddr_in remaddr;     /* remote address */
     socklen_t addrlen = sizeof(remaddr);            /* length of addresses */
     int recvlen;                    /* # bytes received */
     unsigned char buf[MESSAGESIZE];     /* receive buffer */
+    message m;
 
-    recvlen = recvfrom(fd, buf, MESSAGESIZE, 0, (struct sockaddr *)&remaddr, &addrlen);
-    buf[recvlen] = 0;
-    printf("received %d bytes\n", recvlen);
-    printf("%s\n", buf);
+    int count = 0;
+    while(1){
+        recvlen = recvfrom(fd, buf, MESSAGESIZE, 0, (struct sockaddr *)&remaddr, &addrlen);
+        memcpy(&m, buf, recvlen);
+        //printf("received %d bytes\n", recvlen);
+        //printf("layer %d wob %d offset %d\n", m.layer, m.wob, m.offset);
+        ++count;
+        if(count % 100 == 0) printf("%d\n", count);
+    }
+    //printf("%s\n", buf);
 }
 
-void client_update()
+void client_update(network net)
 {
     int fd = socket_setup(CLIENT_PORT);
     struct hostent *hp;     /* host information */
     struct sockaddr_in servaddr;    /* server address */
+    printf("%ld %ld\n", sizeof(message), MESSAGESIZE);
     char *my_message = "this is a test message";
 
+    unsigned char buf[MESSAGESIZE];
+    message m;
+
     /* fill in the server's address and data */
     memset((char*)&servaddr, 0, sizeof(servaddr));
     servaddr.sin_family = AF_INET;
@@ -78,7 +98,39 @@
     memcpy((void *)&servaddr.sin_addr, hp->h_addr_list[0], hp->h_length);
 
     /* send a message to the server */
-    if (sendto(fd, my_message, strlen(my_message), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
-        perror("sendto failed");
+    int i, j, k;
+    for(i = 0; i < net.n; ++i){
+        if(net.types[i] == CONNECTED){
+            connected_layer *layer = (connected_layer *) net.layers[i];
+            m.layer = i;
+            m.wob = 0;
+            for(j = 0; j < layer->outputs; j += NUMFLOATS){
+                m.offset = j;
+
+                int num = layer->outputs - j;
+                if(NUMFLOATS < num) num = NUMFLOATS;
+
+                memcpy(m.data, &layer->bias_updates[j], num*sizeof(float));
+                memcpy(buf, &m, MESSAGESIZE);
+
+                if (sendto(fd, buf, MESSAGESIZE, 0, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
+                    perror("sendto failed");
+                }
+            }
+            m.wob = 1;
+            for(j = 0; j < layer->outputs*layer->inputs; j += NUMFLOATS){
+                m.offset = j;
+
+                int num = layer->outputs*layer->inputs - j;
+                if(NUMFLOATS < num) num = NUMFLOATS;
+
+                memcpy(m.data, &layer->weight_updates[j], num*sizeof(float));
+                memcpy(buf, &m, MESSAGESIZE);
+
+                if (sendto(fd, buf, MESSAGESIZE, 0, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
+                    perror("sendto failed");
+                }
+            }
+        }
     }
 }

--
Gitblit v1.10.0