使用客戶端伺服器模型在 C/C++ 中反轉字串
在本文中,我們將探究如何建立一個系統,在這個系統中,我們將建立一個客戶端和一個伺服器,客戶端可以向伺服器傳送一個字串,伺服器將會反轉該字串並返回給客戶端。
我們將使用套接字程式設計的概念。為了建立客戶端伺服器連線,我們必須建立埠。埠號是由套接字使用的任意數字。我們必須為客戶端和伺服器使用相同的埠來建立連線。
要啟動程式,首先啟動伺服器程式:
gcc Server.c –o server
然後啟動客戶端程式:
gcc Client.c –o server
伺服器現在將等待來自客戶端的字串。我們必須從客戶端獲取一個字串作為輸入,然後進行傳輸。伺服器將列印該字串,併發送反轉後的字串。之後,客戶端將列印來自伺服器的反轉字串。
示例
//Client Side Code
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#define PORT 4000
main() {
struct sockaddr_in address;
int my_socket = 0, valread;
struct sockaddr_in server_address;
char str[100];
int l;
printf("Enter a String:");
fgets(str, 100, stdin); //read string until new line character is pressed
char buffer[1024] = { 0 }; //create a buffer and fill with 0
// Creating socket file descriptor
if ((my_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("\nUnable to create Socket \n");
return -1;
}
memset(&server_address, '0', sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_port = htons(PORT);
if (inet_pton(AF_INET, "127.0.0.1", &server_address.sin_addr) <= 0) {
printf("\nThe address is not supported \n");
return -1;
}
// connect the socket
if (connect(my_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
printf("\nUnable to connect to the server \n");
return -1;
}
l = strlen(str);
send(my_socket, str, sizeof(str), 0); // send message to server side
valread = read(my_socket, str, l); // read message sent by server
printf("%s\n", str);
}示例
//Server Side Code
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#define PORT 4000
char *strrev(char *str){
char *p1, *p2;
if (! str || ! *str)
return str;
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2){
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
return str;
}
main() {
int server_fd, new_socket, valread;
struct sockaddr_in address;
char str[100];
int addrlen = sizeof(address);
char buffer[1024] = { 0 };
int i, j, temp;
int l;
char* message = "Welcome to the server"; //initial message
// Creating socket file descriptor
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("Socket connection failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) { //attack with socket 4000
perror("Unable to bind with the socket 4000");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 3) < 0) {
perror("Listning.....");
exit(EXIT_FAILURE);
}
if ((new_socket = accept(server_fd, (struct sockaddr*)&address,(socklen_t*)&addrlen)) < 0) {
perror("Accept");
exit(EXIT_FAILURE);
}
// read string send by client
valread = read(new_socket, str, sizeof(str));
l = strlen(str);
printf("\nString sent by client:%s\n", str);
strrev(str); //reverse the string
send(new_socket, str, sizeof(str), 0);
printf("\nReversed Strng is sent\n");
}輸出

廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP