server运行在ubuntu虚拟机上,client运行在开发板上面。
server端代码:
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main(){
int socketFd = -1, con_socketFd = -1;
struct sockaddr_in server_add, client_add;
socklen_t size_client_add;
char rdbuf[10];
int number;
char *result;
int on = 1;
unsigned int client_ip;
unsigned short portnum = htons(2222);
server_add.sin_family = AF_INET;
server_add.sin_port = portnum;
server_add.sin_addr.s_addr = htonl(INADDR_ANY);
printf("Create Socket\n");
if( (socketFd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
printf("Fail on Creating Socket\n");
exit(1);
}
setsockopt( socketFd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );
printf("Bind the Socket\n");
if( bind(socketFd, (struct sockaddr*) &server_add, sizeof(struct sockaddr_in)) == -1 ){
printf("Fail on Binding Socket\n");
exit(1);
}
printf("Listen to the socket\n");
if( listen(socketFd, 10) == -1 ){
printf("Fail on Listening\n");
exit(1);
}
printf("Waiting For the Connections from Clients\n");
if( (con_socketFd = accept(socketFd, (struct sockaddr*) &client_add, &size_client_add)) == -1 ){
printf("Fail on Connecting\n");
exit(1);
}
client_ip = ntohl(client_add.sin_addr.s_addr);
printf("%d",client_ip);
printf("Built Connection with the Client: IP[%d.%d.%d.%d], Port[%d]\n", (client_ip&0xff000000)>>24, (client_ip&0x00ff0000)>>16, (client_ip&0x0000ff00)>>8, (client_ip&0x000000ff), ntohs(client_add.sin_port) );
while(1){
memset(rdbuf, 0, sizeof(rdbuf));
if( read(con_socketFd, rdbuf, 10) <= 0 ) continue;
number = atoi(rdbuf);
number = number*2;
memset(rdbuf, 0, sizeof(rdbuf));
sprintf(rdbuf, "%d", number);
write(con_socketFd, rdbuf, strlen(rdbuf));
}
return 0;
}
client端代码:
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main(){
int socketFd = -1;
struct sockaddr_in server_add;
char inputBuf[11];
int output;
unsigned short portnum = htons(2222);
server_add.sin_family = AF_INET;
server_add.sin_port = portnum;
inet_aton("192.168.1.7", &server_add.sin_addr);
printf("Create Socket\n");
if( (socketFd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
printf("Fail on Creating Socket\n");
exit(1);
}
printf("Connet the Server\n");
if( connect(socketFd, (struct sockaddr*) &server_add, sizeof(struct sockaddr_in)) != 0 ){
printf("Fail on Connecting\n");
exit(1);
}
while(1){
memset(inputBuf, 0, sizeof(inputBuf));
printf("Connected, Please Enter Number:\n");
scanf("%s",inputBuf);
if(strncmp(inputBuf, "end", 3) == 0) break;
write(socketFd, inputBuf, strlen(inputBuf));
memset(inputBuf, 0, sizeof(inputBuf));
while(!read(socketFd, inputBuf, 11));
output = atoi(inputBuf);
printf("Result is %d\n", output);
}
close(socketFd);
return 0;
}