- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在用 C 语言开发一个服务器(基本上是一个允许写入数据库的后台服务),它从两个不同的 python 客户端以字符串形式接收数据流,而客户端又使用分隔符来分隔数据流。从字符串生成标记并将它们写入各自/不同的 xml 文件。代码部分可能看起来很长,但它是一个非常简单的程序,所以请耐心等待并尝试提供帮助,因为我是客户端-服务器架构的新手,并且希望了解所有这些复杂性。提前致谢。
我的 C 程序:
#include<stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<string.h>
int main(int argc , char *argv[])
{
int socket_desc , new_socket , c, valread;
struct sockaddr_in server, client ;
char *message;
char buffer[1024] = {0};
char *hello = "Hello from server";
int opt = 1;
char *string;
const char s[2] = ";";
char *token;
char *sid;
char *name;
char *host;
char *port;
char *proto;
char *user;
char *password;
char *key;
char *companyName;
char *officeAddress;
char *state;
char *country;
char *ladmin;
char *phone;
char *mobile;
char *email;
char *designation;
char *rmanager;
char *sip;
char *polname;
char *device;
char *status;
char *srczone;
char *dstzone;
char *srcaddr;
char *dstaddr;
char *srcuser;
char *app;
char *service;
char *urlcategory;
char *action;
//Create socket
socket_desc = socket(AF_INET , SOCK_STREAM , 0);
if (socket_desc == 0)
{
printf("Could not create socket");
}
if (setsockopt(socket_desc, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)))
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
//Prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );
//Bind
if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
{
puts("bind failed");
}
puts("bind done");
//Listen
listen(socket_desc , 3);
while(1){
//Accept and incoming connection
puts("Waiting for incoming connections...");
c = sizeof(struct sockaddr_in);
new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
if (new_socket<0)
{
perror("accept failed");
}
puts("Connection accepted\n");
valread = read(new_socket, buffer, 1024);
printf("%s\n", buffer);
string = buffer;
//Macro that I am using to distinguish between clients and the work to be done
token = strtok(string,s);
//If server is passed as the first token, following code to be executed
printf("%s", token);
if( token == "server" ){
sid = strtok(NULL, s);
printf("\nSERVER-ID: %s\n", sid);
name = strtok(NULL, s);
printf("\nName: %s\n", name);
host = strtok(NULL,s);
printf("\nHost: %s\n", host);
port = strtok(NULL,s);
printf("\nPort: %s\n", port);
proto = strtok(NULL,s);
printf("\nProto: %s\n", proto);
user = strtok(NULL,s);
printf("\nUser: %s\n", user);
password = strtok(NULL, s);
printf("\nPassword: %s\n", password);
key = strtok(NULL,s);
printf("\nKey: %s\n", key);
companyName = strtok(NULL,s);
printf("\nCompanyName: %s\n", companyName);
officeAddress = strtok(NULL,s);
printf("\nOfficeAddress: %s\n", officeAddress);
state = strtok(NULL,s);
printf("\nState: %s\n", state);
country = strtok(NULL,s);
printf("\nCountry: %s\n", country);
email = strtok(NULL,s);
printf("/nEmail: %s\n", email);
ladmin = strtok(NULL,s);
printf("\nLAdmin: %s\n", ladmin);
phone = strtok(NULL,s);
printf("\nPhone: %s\n", phone);
mobile = strtok(NULL,s);
printf("\nMobile: %s\n", mobile);
designation = strtok(NULL, s);
printf("\nDesignation: %s\n", designation);
rmanager = strtok(NULL, s);
printf("\nReportingManager: %s\n", rmanager);
FILE *xml_file;
xml_file = fopen("/var/www/db/db_server_list.xml", "a+");
fseek(xml_file, -8, SEEK_END);
ftruncate(fileno(xml_file),ftello(xml_file));
fprintf(xml_file, "\n<server id='%s'>\n", sid);
fprintf(xml_file, " <name>%s</name>\n", name);
fprintf(xml_file, " <host>%s</host>\n", host);
fprintf(xml_file, " <port>%s</port>\n", port);
fprintf(xml_file, " <proto>%s</proto>\n", proto);
fprintf(xml_file, " <user>%s</user>\n", user);
fprintf(xml_file, " <password>%s</password>\n", password);
fprintf(xml_file, " <key>%s</key>\n", key);
fprintf(xml_file, " <companyName>%s</companyName>\n", companyName);
fprintf(xml_file, " <address>\n");
fprintf(xml_file, " <officeAddr>%s</officeAddr>\n", officeAddress);
fprintf(xml_file, " <state>%s</state>\n", state);
fprintf(xml_file, " <country>%s</country>\n", country);
fprintf(xml_file, " </address>\n");
fprintf(xml_file, " <contacts>\n");
fprintf(xml_file, " <ladmin>%s</ladmin>\n", ladmin);
fprintf(xml_file, " <phone>%s</phone>\n", phone);
fprintf(xml_file, " <mobile>%s</mobile>\n", mobile);
fprintf(xml_file, " <email>%s</email>\n", email);
fprintf(xml_file, " <designation>%s</designation>\n", designation);
fprintf(xml_file, " <rManager>%s</rManager>\n", rmanager);
fprintf(xml_file, " </contacts>\n");
fprintf(xml_file, " </server>\n", key);
fprintf(xml_file, "</data>");
fclose(xml_file);
send(new_socket, hello, 17, 0);
printf("\nSocket: Sent data to the client!\n");
}
else if (token == "policy"){
sip = strtok(NULL, s);
printf("\nserverip: %s\n", sip);
polname = strtok(NULL, s);
printf("\nPolicy Name: %s\n", polname);
device = strtok(NULL,s);
printf("\nDevice Name: %s\n", device);
status = strtok(NULL,s);
printf("\nStatus: %s\n", status);
srczone = strtok(NULL,s);
printf("\nSrcZone: %s\n", srczone);
dstzone = strtok(NULL,s);
printf("\nDstZone: %s\n", dstzone);
srcaddr = strtok(NULL, s);
printf("\nSrcAddr: %s\n", srcAddr);
dstaddr = strtok(NULL,s);
printf("\nDstAddr: %s\n", dstAddr);
srcuser = strtok(NULL,s);
printf("\nSrcUser: %s\n", srcuser);
app = strtok(NULL,s);
printf("\nApplication: %s\n", app);
service = strtok(NULL,s);
printf("\nService: %s\n", service);
urlcategory = strtok(NULL,s);
printf("\nUrlCategory: %s\n", urlcategory);
action = strtok(NULL,s);
printf("/nAction: %s\n", action);
FILE *xml_file;
xml_file = fopen("/var/www/db/db_policy.xml", "a+");
fseek(xml_file, -14, SEEK_END);
ftruncate(fileno(xml_file),ftello(xml_file));
fprintf(xml_file, "\n<policyDecryption>\n",);
fprintf(xml_file, " <policyName>%s</policyName>\n", polname);
fprintf(xml_file, " <deviceName>%s</deviceName>\n", device);
fprintf(xml_file, " <status>%s</status>\n", status);
fprintf(xml_file, " <srcZone>%s</srcZone>\n", srczone);
fprintf(xml_file, " <dstZone>%s</dstZone>\n", dstzone);
fprintf(xml_file, " <srcAddr>%s</srcAddr>\n", srcaddr);
fprintf(xml_file, " <dstAddr>%s</dstAddr>\n", dstaddr);
fprintf(xml_file, " <srcUser>%s</srcUser>\n", srcuser);
fprintf(xml_file, " <application>%s</application>\n", app);
fprintf(xml_file, " <service>%s</service>\n", service);
fprintf(xml_file, " <urlCategory>%s</urlCategory>\n", urlcategory);
fprintf(xml_file, " <action>%s</action>\n", action);
fprintf(xml_file, " </policyDecryption>\n");
fprintf(xml_file, "</policyList>");
fclose(xml_file);
send(new_socket, hello, 17, 0);
printf("\nSocket: Sent data to the client!\n");
}
}
return 0;
}
当我尝试在不使用宏的情况下将数据发送到该服务器时,它也会打印宏,现在我已经添加了第二个宏以及后面的代码,客户端被卡住并且无法打印/写入数据库发生,我必须使用 Ctrl+C
结束执行才能停止。
这是解决我的问题的正确方法吗?我做错了什么吗?我知道这不是完成这项工作的最佳方式,因此欢迎任何和所有建议。
客户端是基于Python的CGI脚本,它从UI页面获取动态数据并将该数据作为字符串发送。我将“服务器”和“策略”附加为两个不同的宏,应该读取它们并相应地执行以下代码。
最佳答案
具有多个连接的 C++ ssl 服务器 https://github.com/breakermind/cppSockets/tree/master/SslServerExample
Working example with C++ fork() function or with threads.
fork() - server create new prossess for each new connection
thread() - server create new thread for each new connection
您只需更改此函数/方法中的部分
void ServerLoop(SSL *ssl, string ipAddress){ }
您可以测试来自 openssl 客户端的连接
openssl s_client -connect hostname:999
如果连接到 smtp 服务器则
openssl s_client -connect hostname:25 -starttls smtp
关于c - 通过 C 语言的套接字编程处理多个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47431265/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!