cancel
Showing results for 
Search instead for 
Did you mean: 
Announcements
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.

Client/Server example for DE2 uClinux

Client/Server example for DE2 uClinux



A simple example for communicating over ethernet using sockets and TCP/IP is given here.

Compile the server.c on server machine using: gcc server.c -o server

Compile the client.c on server machine using: nios2-linux-uclibc-gcc -elf2flt client.c -o client

Copy client to DE2 or use nfs mounted share.

Run server as: ./server 8888 # where 8888 is arbitrary port above 1024, wait for client

Run client as: ./client 192.168.1.10 8888 # where 192.168.1.10 is server IP addr, send message to server

Server program server.c (attached):

/* A simple server in the internet domain using TCP

The port number is passed as an argument */


#include <stdio.h>

#include <stdlib.h>

#include <strings.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>


void error(char *msg)

{

perror(msg);

exit(1);

}


int main(int argc, char *argv[])

{

int sockfd, newsockfd, portno, clilen;

char buffer[256];

struct sockaddr_in serv_addr, cli_addr;

int n;

if (argc < 2) {

fprintf(stderr,"ERROR, no port provided\n");

exit(1);

}

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0)

error("ERROR opening socket");

bzero((char *) &serv_addr, sizeof(serv_addr));

portno = atoi(argv[1]);

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = INADDR_ANY;

serv_addr.sin_port = htons(portno);

if (bind(sockfd, (struct sockaddr *) &serv_addr,

sizeof(serv_addr)) < 0)

error("ERROR on binding");

listen(sockfd,5);

clilen = sizeof(cli_addr);

newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

if (newsockfd < 0)

error("ERROR on accept");

bzero(buffer,256);

n = read(newsockfd,buffer,255);

if (n < 0) error("ERROR reading from socket");

printf("Here is the message: %s\n",buffer);

n = write(newsockfd,"I got your message",18);

if (n < 0) error("ERROR writing to socket");

return 0;

}

Client program client.c (attached):

#include <stdio.h>

#include <strings.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>


void error(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));

memset((char *) &serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

//bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);

memcpy((char *)&serv_addr.sin_addr.s_addr, (char *)server->h_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);

memset(buffer,0,256);

fgets(buffer,255,stdin);

n = write(sockfd,buffer,strlen(buffer));

if (n < 0)

error("ERROR writing to socket");

//bzero(buffer,256);

memset(buffer,0,256);

n = read(sockfd,buffer,255);

if (n < 0)

error("ERROR reading from socket");

printf("%s\n",buffer);

return 0;

}

This code was modified from http://www.cs.rpi.edu/~moorthy/Courses/os98/Pgms/

Attachments
Version history
Last update:
‎06-24-2019 11:51 PM
Updated by:
Contributors