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:
Wed Jan 15 20:37:57 2014 +0000
Revision:
0:9e8b3fd68f6c
Child:
2:922ee74b0192
First Version

Who changed what in which revision?

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