This example shows using the SeeedStudio arch pro as an Ethernet server. It will initialize the Ethernet port, display its IP address, display the IP address of connecting clients and then return data sent from the client.

Dependencies:   EthernetInterface SeeedGrayOLED USBDevice mbed-rtos mbed

Fork of Ethernet_Status_HelloWorld by Edoardo De Marchi

This mbed server example for SeeedStudio also needs a client to connect.

I compiled and ran this on my opensuse linux virtual machine but I think it should compile and run fine on most linux distrubutions and probably on OSX as well:

<codei>

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <unistd.h>
  4. include <string.h>
  5. include <sys/types.h>
  6. include <sys/socket.h>
  7. include <netinet/in.h>
  8. include <netdb.h>

void error(const char *msg) { perror(msg); exit(0); }

int main(int argc, char *argv[]) { int sockfd, portno, n; struct sockaddr_in serv_addr; struct hostent *server;

char buffer[256]; if (argc < 3) { fprintf(stderr,"usage %s hostname port\n", argv[0]); exit(0); } portno = atoi(argv[2]); sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); server = gethostbyname(argv[1]); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) error("ERROR connecting"); printf("Please enter the message: "); bzero(buffer,256); fgets(buffer,255,stdin); n = write(sockfd,buffer,strlen(buffer)); if (n < 0) error("ERROR writing to socket"); bzero(buffer,256); n = read(sockfd,buffer,255); if (n < 0) error("ERROR reading from socket"); printf("%s\n",buffer); close(sockfd); return 0; } <code>

Committer:
edodm85
Date:
Sat Feb 15 13:43:36 2014 +0000
Revision:
2:922ee74b0192
Parent:
0:9e8b3fd68f6c
Child:
3:af736e1af4a9
Fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edodm85 0:9e8b3fd68f6c 1 /*
edodm85 0:9e8b3fd68f6c 2 * Author: Edoardo De Marchi
edodm85 2:922ee74b0192 3 * Date: 15/02/14
edodm85 2:922ee74b0192 4 * Notes: Checks the Ethernet cable
edodm85 0:9e8b3fd68f6c 5 */
edodm85 0:9e8b3fd68f6c 6
edodm85 0:9e8b3fd68f6c 7
edodm85 0:9e8b3fd68f6c 8 #include "mbed.h"
edodm85 0:9e8b3fd68f6c 9 #include "EthernetInterface.h"
edodm85 0:9e8b3fd68f6c 10 #include "eth_status.h"
edodm85 0:9e8b3fd68f6c 11
edodm85 0:9e8b3fd68f6c 12 DigitalOut led1(LED1);
edodm85 0:9e8b3fd68f6c 13 DigitalOut led2(LED2);
edodm85 0:9e8b3fd68f6c 14 DigitalOut led3(LED3);
edodm85 0:9e8b3fd68f6c 15 DigitalOut led4(LED4);
edodm85 2:922ee74b0192 16
edodm85 0:9e8b3fd68f6c 17
edodm85 0:9e8b3fd68f6c 18 //ETHERNET
edodm85 0:9e8b3fd68f6c 19 #define ECHO_SERVER_PORT 2000
edodm85 0:9e8b3fd68f6c 20
edodm85 0:9e8b3fd68f6c 21 char* ip = "192.168.153.153"; // ip
edodm85 0:9e8b3fd68f6c 22 char* mask = "255.255.255.0"; // mask
edodm85 0:9e8b3fd68f6c 23 char* gateway = "192.168.153.100"; // gateway
edodm85 0:9e8b3fd68f6c 24 EthernetInterface eth;
edodm85 0:9e8b3fd68f6c 25 TCPSocketConnection client;
edodm85 0:9e8b3fd68f6c 26 TCPSocketServer server;
edodm85 0:9e8b3fd68f6c 27
edodm85 0:9e8b3fd68f6c 28
edodm85 0:9e8b3fd68f6c 29 int Init()
edodm85 0:9e8b3fd68f6c 30 {
edodm85 0:9e8b3fd68f6c 31 led1 = 0;
edodm85 0:9e8b3fd68f6c 32 led2 = 0;
edodm85 0:9e8b3fd68f6c 33 led3 = 0;
edodm85 0:9e8b3fd68f6c 34 led4 = 0;
edodm85 0:9e8b3fd68f6c 35
edodm85 0:9e8b3fd68f6c 36
edodm85 0:9e8b3fd68f6c 37 // ETHERNET
edodm85 0:9e8b3fd68f6c 38 eth.init(ip, mask, gateway);
edodm85 0:9e8b3fd68f6c 39 eth.connect();
edodm85 0:9e8b3fd68f6c 40 server.bind(ECHO_SERVER_PORT);
edodm85 0:9e8b3fd68f6c 41 server.listen(1);
edodm85 0:9e8b3fd68f6c 42 printf("IP Address is %s\r\n", eth.getIPAddress());
edodm85 0:9e8b3fd68f6c 43 printf("%s - Speed: %d Mbps\n", get_transmission_status(), get_connection_speed());
edodm85 0:9e8b3fd68f6c 44
edodm85 0:9e8b3fd68f6c 45 return 0;
edodm85 0:9e8b3fd68f6c 46 }
edodm85 0:9e8b3fd68f6c 47
edodm85 0:9e8b3fd68f6c 48
edodm85 0:9e8b3fd68f6c 49
edodm85 0:9e8b3fd68f6c 50 int main()
edodm85 0:9e8b3fd68f6c 51 {
edodm85 0:9e8b3fd68f6c 52 bool eth_status = false;
edodm85 0:9e8b3fd68f6c 53 bool eth_status_temp = true;
edodm85 0:9e8b3fd68f6c 54
edodm85 0:9e8b3fd68f6c 55 Init();
edodm85 0:9e8b3fd68f6c 56
edodm85 0:9e8b3fd68f6c 57
edodm85 0:9e8b3fd68f6c 58 while(true)
edodm85 0:9e8b3fd68f6c 59 {
edodm85 0:9e8b3fd68f6c 60 printf("\nWait for new connection...\n");
edodm85 0:9e8b3fd68f6c 61 server.accept(client);
edodm85 0:9e8b3fd68f6c 62
edodm85 0:9e8b3fd68f6c 63 printf("Connection from: %s\n", client.get_address());
edodm85 0:9e8b3fd68f6c 64
edodm85 0:9e8b3fd68f6c 65 while (true)
edodm85 0:9e8b3fd68f6c 66 {
edodm85 0:9e8b3fd68f6c 67 if(!get_link_status())
edodm85 0:9e8b3fd68f6c 68 {
edodm85 0:9e8b3fd68f6c 69 eth_status = true;
edodm85 0:9e8b3fd68f6c 70 }else
edodm85 0:9e8b3fd68f6c 71 {
edodm85 2:922ee74b0192 72 eth_status = false;
edodm85 2:922ee74b0192 73 eth_status_temp = true;
edodm85 0:9e8b3fd68f6c 74 led1 = 0;
edodm85 0:9e8b3fd68f6c 75 }
edodm85 0:9e8b3fd68f6c 76
edodm85 0:9e8b3fd68f6c 77 if(eth_status == eth_status_temp)
edodm85 0:9e8b3fd68f6c 78 {
edodm85 0:9e8b3fd68f6c 79 eth_status_temp = !eth_status;
edodm85 0:9e8b3fd68f6c 80 printf("Check cable connection\r\n");
edodm85 0:9e8b3fd68f6c 81 led1 = 1;
edodm85 0:9e8b3fd68f6c 82 eth_status = false;
edodm85 0:9e8b3fd68f6c 83 }
edodm85 0:9e8b3fd68f6c 84 led2 = !led2;
edodm85 0:9e8b3fd68f6c 85 osDelay(500);
edodm85 0:9e8b3fd68f6c 86 }
edodm85 0:9e8b3fd68f6c 87 }
edodm85 0:9e8b3fd68f6c 88 }