Community
cancel
Showing results for 
Search instead for 
Did you mean: 

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
Revision #:
1 of 1
Last update:
‎06-24-2019 11:51 PM
Updated by:
 
Contributors